精华内容
下载资源
问答
  • 2022-01-02 22:07:54

    GAM_attention

    import torch.nn as nn
    import torch
     
     
    class GAM_Attention(nn.Module):
        def __init__(self, in_channels, out_channels, rate=4):
            super(GAM_Attention, self).__init__()
     
            self.channel_attention = nn.Sequential(
                nn.Linear(in_channels, int(in_channels / rate)),
                nn.ReLU(inplace=True),
                nn.Linear(int(in_channels / rate), in_channels)
            )
     
            self.spatial_attention = nn.Sequential(
                nn.Conv2d(in_channels, int(in_channels / rate), kernel_size=7, padding=3),
                nn.BatchNorm2d(int(in_channels / rate)),
                nn.ReLU(inplace=True),
                nn.Conv2d(int(in_channels / rate), out_channels, kernel_size=7, padding=3),
                nn.BatchNorm2d(out_channels)
            )
     
        def forward(self, x):
            b, c, h, w = x.shape
            print(x.shape)
            x_permute = x.permute(0, 2, 3, 1).view(b, -1, c)
            print("x_permute",x_permute.shape)
            x_att_permute = self.channel_attention(x_permute).view(b, h, w, c)
            print("x_att_permute",x_att_permute.shape)
            x_channel_att = x_att_permute.permute(0, 3, 1, 2)
            print("x_channel_att",x_channel_att.shape)
     
            x = x * x_channel_att
            print("x2",x.shape)
     
            x_spatial_att = self.spatial_attention(x).sigmoid()
            print("x_spatial_att",x_spatial_att.shape)
            out = x * x_spatial_att
            print("out",out.shape)
     
            return out
     
     
    if __name__ == '__main__':
        x = torch.randn(1, 4, 128, 128)
        b, c, h, w = x.shape
        net = GAM_Attention(in_channels=c, out_channels=c)
        y = net(x)
    
    更多相关内容
  • gam

    2021-02-16 00:26:25
    agencyX 将Storyblok与Netlify连接起来的示例自包含e2e模板 Vite + VueJs3 + Tailwind CSS入门 请注意,如果您有权访问 ,则可以改用。 安装 yarn 发展 yarn dev 建造 yarn build ...yarn init-schema
  • 深度学习中的GAM注意力机制pytorch实现版本
  • mgcViz R软件包提供了用于通用加性模型(GAM)的可视化工具。 mgcViz提供的可视化与mgcv中实现的可视化有所不同,因为大多数绘图都基于ggplot2强大的分层系统。 这是通过包装几个ggplot2层并将其与GAM模型特定的计算...
  • 基于“ ggplot”的优美图形和实用程序功能,可用于使用“ mgcv”软件包安装的广义加性模型(GAM)。 为'mgcv'提供的GAM提供plot()方法的重新实现,以及估计的平滑度的'tidyverse'兼容表示。 特征 特惠的主要特点是...
  • GAM (Git Alias经理) GAM是用NodeJS编写的CLI应用程序(带有API组件),用于管理多个Git帐户(别名)。 安装 在本地使用NPM 使用API $ npm i git-alias-manager 通过全球NPM 使用CLI $ npm i git-alias-...
  • 谈到GAM和SGAM,我们不得不从数据库的页和区说起。一个数据库由用户定义的空间构成,这些空间用来永久存储用户对象,例如数据库管理信息、表和索引。这些空间被分配在一个或多个操作系统文件中
  • 加姆 gam示例代码进行测试
  • GAM阈值 利用GAM识别生态系统响应中的重要趋势和阈值
  • GAM900-GAM900S塔筒振动pdf,简介:在实现“过大冲击和塔筒振动保护”这一安全功能方面,GAM900S是您最理想的传感器。由于集成了包括信号处理在内的限值监控功能,因此无需控制具体实施的安全级嵌入式软件或应用软件...
  • 传祺-AIONS-产品使用说明书-魅630安全智驾版-GAM7000BEVA0C-AionS炫用户手册——2019-7-4.pdf
  • 首先为了分析车辆传输半径对端到端传输时延的影响,提出了基于存储携带转发路由的车间通信间隙时延分析模型(SCF-GAM),再量化了关于端到端传输时延的拉氏变换的性能。最后,通过仿真数据验证了SCF-GAM模型。
  • 使用 Google Apps Manager (GAM) 的工具。 它是什么? 是一个免费的开源命令行工具,供 Google Apps 管理员快速轻松地管理域和用户设置。 GAM 有一些模式,它可以通过读取或导出 CSV 数据来批量操作。 但是,有时...
  • Gmail的Mac客户端GAM.zip

    2019-07-16 04:49:00
    GAM 是 Gmail 的 Mac OS X 平台客户端,可有效解决附件管理的问题,可以收发邮件,批量下载附件等。
  • 程序在获胜概率为100%(对于给定的后卫)的情况下,对{cost_of_production + loses + fueled}进行多维优化。 仿真引擎是类似SpeedSim的GNU Ogame Simulator,优化引擎是NOMAD项目。 限制预算,可用船只和设置比例为
  • 对于每个程序集和每个读取库,GAM-NGS的输入都需要一个文件,其中列出了已对齐库的BAM文件。 该文件的格式必须如以下示例所示: $ cat assembly.PE.bams.txt /path/to/bam/file/master-pe-lib1.bam <min> /path/to...
  • GAM230

    2021-03-27 06:07:13
    GAM230
  • 图3:空间注意力子模块 代码实现 import torch.nn as nn import torch class GAM_Attention(nn.Module): def __init__(self, in_channels, out_channels, rate=4): super(GAM_Attention, self).__init__() self....

    paper:https://arxiv.org/pdf/2112.05561v1.pdf

    目录

    1. Introduction

    2. Related Works

    3. Global Attention Mechanism (GAM)

    代码实现

    4. Experiment

    4.1 Classification on CIFAR-100 and ImageNet datasets

    4.2 Ablation studies

    5. Conclusion

    References


    Abstract

            为了提高各种计算机视觉任务的性能,人们研究了各种注意机制。然而,以往的方法忽略了保留通道和空间两个方面的信息对增强跨维交互作用的重要性。因此,我们提出了一种全局吸引机制,通过减少信息约简和放大全局交互表示来提高深度神经网络的性能。在卷积空间关注子模块的基础上,提出了一种基于多层感知器的三维排列通道关注子模块。在CIFAR-100和ImageNet-1K上对所提出的图像分类机制的评估表明,我们的方法稳定地优于最近几种使用ResNet和轻量级MobileNet的注意机制。


    1. Introduction

            卷积神经网络(CNNs)在计算机视觉领域的许多任务和应用中得到了广泛的应用(Girshick et al.)。研究人员发现,CNN在提取深层视觉表征方面表现良好。随着CNNs相关技术的改进,ImageNet数据集上的图像分类(Den et al.)在过去九年中,准确率从63%提高到90%(Krizhevsky et al)。这一成就还归功于ImageNet数据集的复杂性,这为相关研究提供了难得的机会。鉴于其涵盖的真实场景的多样性和广泛性,它给传统的表象分类基准、表征学习、迁移学习等研究带来了很大的益处,特别是对注意机制的研究也带来了挑战。

            近年来,注意机制在多种应用中的性能不断提高,并引起了人们的研究兴趣(Niu et al.)。Wang et al.使用编解码器残差注意模块对特征映射进行细化,以获得更好的性能。Hu et al.,Woo et al.、Park et al.分别使用空间注意机制和通道注意机制,获得了较高的准确率。然而,由于信息减少和维度分离,这些机制利用了来自有限感受域的视觉表示。在这一过程中,它们失去了全球空间-通道交互作用。我们的研究目标是让注意力机制跨越空间通道维度。我们提出了一种保留信息的“全局”注意机制,以放大“全局”的跨维互动。因此,我们将所提出的方法命名为全局注意机制Global Attention Mechanism(GAM)

    2. Related Works

            已经有几个研究集中在图像分类任务中注意机制的性能改善上。挤压激励网络(SENet)(Hu et al.)首先利用通道注意和通道特征融合来抑制不重要的通道,但对不重要的像素的抑制效率较低。后一种注意机制同时考虑了空间维度和通道维度。卷积挡路注意模块(CBAM)(Woo et al.)顺序放置通道和空间注意操作,而瓶颈注意模块(BAM)(Park et al.)同时进行。然而,这两种方法都忽略了通道-空间的相互作用,从而丢失了跨维信息。考虑到跨维交互的重要性,三元组注意模块(TAM)(Misra et al.)通过利用通道、空间宽度和空间高度这三个维度中每一对之间的注意权重来提高效率。但是,每次注意操作仍然应用于其中两个维度,而不是全部三个维度。为了放大跨维度的交互作用,我们提出了一种能够捕捉所有三个维度的显著特征的注意机制

    3. Global Attention Mechanism (GAM)

            我们的目标是设计一种减少信息缩减并放大全局维度交互特征的机制。我们采用了CBAM中的顺序通道-空间注意机制,并对子模块进行了重新设计。整个过程如图1所示,并在公式1和公式2中表示(Woo et al.)。给定输入特征映射F_{1}\in {R}^{C*H*W},中间状态F_{2}和输出F_{3}定义为:

     其中M_{c}M_{s}分别是通道和空间注意图;\bigotimes表示基于元素的乘法。

    图1:GAM概述

            通道注意力子模块使用3D置换来保留三维信息,然后利用两层MLP(多层感知器)放大跨维通道-空间依赖关系。(MLP是具有缩减比r的编码器-解码器结构,与BAM相同。)通道关注子模块如图2所示。

    图2:通道注意力子模块

            在空间注意力子模块中,为了聚焦空间信息,我们使用了两个卷积层次进行空间信息融合。我们也使用与BAM相同的信道关注子模块的缩减率r。同时,最大汇集减少了信息,对信息的贡献为负。我们去掉了池,以进一步保留功能地图。因此,空间注意模块有时会显著增加参数的数量。为了防止参数的显著增加,我们采用了信道混洗的分组卷积(Zhang et al.)在ResNet50中,不带群卷积的空间注意子模块如图3所示。

    图3:空间注意力子模块

    代码实现

    import torch.nn as nn
    import torch
    
    
    class GAM_Attention(nn.Module):
        def __init__(self, in_channels, out_channels, rate=4):
            super(GAM_Attention, self).__init__()
    
            self.channel_attention = nn.Sequential(
                nn.Linear(in_channels, int(in_channels / rate)),
                nn.ReLU(inplace=True),
                nn.Linear(int(in_channels / rate), in_channels)
            )
    
            self.spatial_attention = nn.Sequential(
                nn.Conv2d(in_channels, int(in_channels / rate), kernel_size=7, padding=3),
                nn.BatchNorm2d(int(in_channels / rate)),
                nn.ReLU(inplace=True),
                nn.Conv2d(int(in_channels / rate), out_channels, kernel_size=7, padding=3),
                nn.BatchNorm2d(out_channels)
            )
    
        def forward(self, x):
            b, c, h, w = x.shape
            x_permute = x.permute(0, 2, 3, 1).view(b, -1, c)
            x_att_permute = self.channel_attention(x_permute).view(b, h, w, c)
            x_channel_att = x_att_permute.permute(0, 3, 1, 2)
    
            x = x * x_channel_att
    
            x_spatial_att = self.spatial_attention(x).sigmoid()
            out = x * x_spatial_att
    
            return out
    
    
    if __name__ == '__main__':
        x = torch.randn(1, 64, 32, 48)
        b, c, h, w = x.shape
        net = GAM_Attention(in_channels=c, out_channels=c)
        y = net(x)
    
    

    4. Experiment

            在本节中,我们评估CIFAR-100上的GAM(Krizhevsky et al.)和ImageNet-1K数据集(Deng et al.)分类基准和两项消融研究。我们使用两个数据集来验证方法的泛化。请注意,这两个数据集都是分类标准。ImageNet-1K对实际应用程序的影响更大。

    4.1 Classification on CIFAR-100 and ImageNet datasets

            我们用两种ResNet来评估GAM(He et al.)和MobileNet V2(Sandler et al.)因为(A)它们是用于图像分类的标准体系结构(B)它们分别代表规则网络和轻量级网络。我们将GAM与SE、BAM、CBAM、TAM和AttentionBranch Network(ABN)(Fukui et al.)进行了比较。我们重新实现了网络和机制,并在相同的条件下对它们进行了价值评估。所有型号均采用四个NVIDIA Tesla V100 GPU进行培训

            对于CIFAR-100,我们评估了使用和不使用群卷积(GC)的GAM。我们对所有网络进行了200个轮次的训练,起始学习率为0.1。然后,我们在60、120和160这三个时期降低学习率。结果如表1所示。结果表明,GAM的性能优于SE、BAM和CBAM

    表1:Cifar100上的分类结果

            对于ImageNet-1K,我们将图像预处理为224×224(He et al.)。我们包括ResNet18和ResNet50(He et al.)。验证方法在不同网络深度上的泛化。对于ResNet50,我们包括与群卷积的比较,以防止参数的显著增加。我们将起始学习率设置为0.1,每30个迭代就放弃它。我们总共使用了90个训练轮次。在空间注意力子模块中,为了匹配特征的大小,我们将第一个块的第一个步长从1切换到2。CBAM保留其他设置以进行公平比较,包括在空间关注子模块中使用最大池化。

            MobileNetV2是用于图像分类的最有效的轻量级模型之一。除了使用0.045的初始学习率和4×10^{-5}的权重衰减外,我们对MobileNetV2使用相同的ResNet设置。

            对ImageNet-1K的评估如表2所示,它表明GAM可以稳定地提高不同神经体系结构的性能。特别是,对于ResNet18,GAM的性能优于ABN,参数更少,效率更高。

    表2:ImageNet-1K上的分类结果

    4.2 Ablation studies

            我们用ResNet18对ImageNet-1K进行了两项消融研究。我们首先分别评估了空间注意和渠道注意的贡献。然后,我们将GAM与CBAM在有无最大汇集的情况下进行了比较。

            为了更好地理解空间注意和通道注意分别对消融的贡献,我们通过开启和关闭一种方式进行了消融研究。例如,ch表示空间注意力被关闭,而频道注意力被打开。SP表示通道关注已关闭,空间关注已打开。结果如表3所示。我们可以在两个开关实验中观察到性能的提高。结果表明,空间关注度和通道关注度对性能增益均有贡献。请注意,它们的组合进一步提高了性能。

    表3:在ImageNet上的消融实验
    *sp仅代表空间注意。ch仅代表通道注意。†如表2所示。

            最大池化可能对空间注意负贡献,这取决于神经结构(例如,ResNet)。因此,我们进行了另一项消融研究,将GAM与CBAM在使用和不使用ResNet18最大池化的情况下进行比较。表4显示了结果。可以观察到,在这两种情况下,我们的方法都优于CBAM。

    表4:在ImageNet上的消融实验
    *wmp仅代表无最大池化。†如表2所示。

    5. Conclusion

            在这项工作中,我们提出了GAM来放大显著的跨维度感受域。实验结果表明,GAM能够稳定地提高不同架构和深度的CNN的性能

            CIFAR-100和ImageNet-1K在我们的评估中作为概念证明进行了基准测试。它们表示随着类和图像数量的增加而不断扩大。因此,我们的实验表明,GAM具有良好的数据拓展能力和鲁棒性。我们认为完整的ImageNet数据集更好地服务于生产中的应用程序。大型模型训练成本很高,尤其是最新的顶级解决方案。我们用ResNet和MobileNet进行的评估也证明了它在模型缩放上的可行性。我们的目标是下一步研究GAM的详细拓展能力。

            随着网络参数的增加,GAM获得性能提升。在未来,我们计划研究减少大型网络参数数量的技术,例如ResNet50、ResNet101等。同时,我们还计划探索其他利用参数减少技术的跨维度注意机制。

    References

    Ross Girshick, Jeff Donahue, Trevor Darrell, and Jitendra Malik. Rich feature hierarchies for accurateobject detection and semantic segmentation. In Proceedings of the IEEE conference on computervision and pattern recognition, pages 580–587, 2014.

    Jonathan Long, Evan Shelhamer, and Trevor Darrell. Fully convolutional networks for semanticsegmentation. In Proceedings of the IEEE conference on computer vision and pattern recognition,pages 3431–3440, 2015.

    Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep residual learning for imagerecognition. In Proceedings of the IEEE conference on computer vision and pattern recognition,pages 770–778, 2016.

    Christoph H Lampert, Hannes Nickisch, and Stefan Harmeling. Learning to detect unseen objectclasses by between-class attribute transfer. In 2009 IEEE Conference on Computer Vision andPattern Recognition, pages 951–958. IEEE, 2009.

    Jia Deng, Wei Dong, Richard Socher, Li-Jia Li, Kai Li, and Li Fei-Fei. Imagenet: A large-scalehierarchical image database. In 2009 IEEE conference on computer vision and pattern recognition,pages 248–255. Ieee, 2009.

    Alex Krizhevsky, Ilya Sutskever, and Geoffrey E Hinton. Imagenet classification with deep con-volutional neural networks. Advances in neural information processing systems, 25:1097–1105,2012.

    Xiaohua Zhai, Alexander Kolesnikov, Neil Houlsby, and Lucas Beyer. Scaling vision transformers.arXiv preprint arXiv:2106.04560, 2021.

    Zhaoyang Niu, Guoqiang Zhong, and Hui Yu. A review on the attention mechanism of deep learning.Neurocomputing, 452:48–62, 2021.

    Fei Wang, Mengqing Jiang, Chen Qian, Shuo Yang, Cheng Li, Honggang Zhang, Xiaogang Wang,and Xiaoou Tang. Residual attention network for image classification. In Proceedings of the IEEEconference on computer vision and pattern recognition, pages 3156–3164, 2017.

    Jie Hu, Li Shen, and Gang Sun. Squeeze-and-excitation networks. In Proceedings of the IEEEconference on computer vision and pattern recognition, pages 7132–7141, 2018.

    Sanghyun Woo, Jongchan Park, Joon-Young Lee, and In So Kweon. Cbam: Convolutional blockattention module. In Proceedings of the European conference on computer vision (ECCV), pages3–19, 2018.

    Jongchan Park, Sanghyun Woo, Joon-Young Lee, and In So Kweon. Bam: Bottleneck attentionmodule. arXiv preprint arXiv:1807.06514, 2018.

    Diganta Misra, Trikay Nalamada, Ajay Uppili Arasanipalai, and Qibin Hou. Rotate to attend:Convolutional triplet attention module. In Proceedings of the IEEE/CVF Winter Conference onApplications of Computer Vision, pages 3139–3148, 2021.

    Xiangyu Zhang, Xinyu Zhou, Mengxiao Lin, and Jian Sun. Shufflenet: An extremely efficientconvolutional neural network for mobile devices. In Proceedings of the IEEE conference oncomputer vision and pattern recognition, pages 6848–6856, 2018.

    Alex Krizhevsky, Geoffrey Hinton, et al. Learning multiple layers of features from tiny images. 2009.

    Mark Sandler, Andrew Howard, Menglong Zhu, Andrey Zhmoginov, and Liang-Chieh Chen. Mo-bilenetv2: Inverted residuals and linear bottlenecks. In Proceedings of the IEEE conference oncomputer vision and pattern recognition, pages 4510–4520, 2018.

    Hiroshi Fukui, Tsubasa Hirakawa, Takayoshi Yamashita, and Hironobu Fujiyoshi. Attention branchnetwork: Learning of attention mechanism for visual explanation. In Proceedings of the IEEE/CVFConference on Computer Vision and Pattern Recognition, pages 10705–10714, 2019.

    展开全文
  • gam将自动向您的PATH添加一个命令,如果安装了GNOME,它将为该应用程序也添加一个快捷方式。 这些在卸载应用程序时会自动删除。 自豪地在发布日就在和上。 内容 安装 首先,安装必备组件。 Debian / Ubuntu: ...
  • 1GAM_1 #1GAM 挑战的参赛作品 - 错过了 1 月和 2 月:/ 应该变成 2P Beat'em'Up、3D、low poly、webgl。 我想要可爱的小有弹性的生物。 工具: 搅拌机 GIMP THREE.js (r68 -- r69 对我的模型有一些问题) 崇高...
  • 拓端tecdat:R语言广义相加模型(GAM)在电力负荷预测中的应用 视频:R语言广义相加模型(GAM)在电力负荷预测中的应用 1导言 这篇文章探讨了为什么使用广义相加模型是一个不错的选择。为此,我们首先需要看一下...

    原文链接:http://tecdat.cn/?p=9024

    原文出处:拓端数据部落公众号

    拓端tecdat:R语言广义相加模型(GAM)在电力负荷预测中的应用

    视频:R语言广义相加模型(GAM)在电力负荷预测中的应用

    1导言

    这篇文章探讨了为什么使用广义相加模型 是一个不错的选择。为此,我们首先需要看一下线性回归,看看为什么在某些情况下它可能不是最佳选择。

    2回归模型

    假设我们有一些带有两个属性Y和X的数据。如果它们是线性相关的,则它们可能看起来像这样:

    图片

    为了检查这种关系,我们可以使用回归模型。线性回归是一种使用X来预测变量Y的方法。将其应用于我们的数据将预测成红线的一组值:

    图片

    这就是“直线方程式”。根据此等式,我们可以从直线在y轴上开始的位置(“截距”或α)开始描述,并且每个单位的x都增加了多少y(“斜率”),我们将它称为x的系数,或称为β)。还有一点自然的波动,如果没有的话,所有的点都将是完美的。我们将此称为“残差”(ϵ)。

    图片

    数学上是:

    图片

    或者,如果我们用实际数字代替,则会得到以下结果:

    图片

    图片

    这篇文章通过考虑每个数据点和线之间的差异(“残差)然后最小化这种差异来估算模型。

    图片


    我们在线的上方和下方都有正误差和负误差,因此,通过对它们进行平方并最小化“平方和”,使它们对于估计都为正。这称为“普通最小二乘法”或OLS。

    3非线性关系如何?

    因此,如果我们的数据看起来像这样,我们该怎么办:

    图片

    我们刚刚看到的模型的关键假设之一是y和x线性相关。如果我们的y不是正态分布的,则使用广义线性模型 _(Nelder&Wedderburn,1972)_,其中y通过链接函数进行变换,但再次假设f(y)和x线性相关。如果不是这种情况,并且关系在x的范围内变化,则可能不是最合适的。我们在这里有一些选择:

    • 我们可以使用线性拟合,但是如果这样做的话,我们会在数据的某些部分上面或者下面。

    • 我们可以分为几类。我在下面的图中使用了三个,这是一个合理的选择。同样,我们可能处于数据某些部分之下或之上,而在类别之间的边界附近似乎是准确的。例如,如果x = 49时,与x = 50相比,y是否有很大不同?

    • 我们可以使用多项式之类的变换。下面,我使用三次多项式,因此模型适合:。这些的组合使函数可以光滑地近似变化。这是一个很好的选择,但可能会极端波动,并可能在数据中引起相关性,从而降低拟合度。

    图片

    4样条曲线

    多项式的进一步细化是拟合“分段”多项式,我们在数据范围内将多项式链在一起以描述形状。“样条线”是分段多项式,以绘图员用来绘制曲线的工具命名。物理样条曲线是一种柔性条,可以弯曲成形,并由砝码固定。在构造数学样条曲线时,我们有多项式函数,二阶导数连续,固定在“结”点上。

    图片

    下面是一个ggplot2 对象,该 对象的 geom_smooth 的公式包含ns 函数中的“自然三次样条”  。这种样条曲线为“三次”

    图片

    ,并且使用10个结

    图片

    5光滑函数

    样条曲线可以是光滑的或“摇摆的”,这可以通过改变节点数(k)或使用光滑惩罚γ来控制。如果我们增加结的数目,它将更“摇摆”。这可能会更接近数据,而且误差也会更小,但我们开始“过度拟合”关系,并拟合我们数据中的噪声。当我们结合光滑惩罚时,我们会惩罚模型中的复杂度,这有助于减少过度拟合。

    图片

    6广义相加模型(GAM)

    广义加性模型(GAM)(Hastie,1984)使用光滑函数(如样条曲线)作为回归模型中的预测因子。

    图片

    这些模型是严格可加的,这意味着我们不能像正常回归那样使用交互项,但是我们可以通过重新参数化作为一个更光滑的模型来实现同样的效果。事实并非如此,但本质上,我们正转向一种模型,如:

    图片

    摘自Wood _(2017)_的GAM的更正式示例 是:

    图片

    其中:

    • μi≡E(Yi),Y的期望

    • Yi〜EF(μi,ϕi),Yi是一个响应变量,根据均值μi和形状参数ϕ的指数族分布。

    • Ai是任何严格参数化模型分量的模型矩阵的一行,其中θ为对应的参数向量。

    • fi是协变量xk的光滑函数,其中k是每个函数的基础。

    如果您要建立回归模型,但怀疑光滑拟合会做得更好,那么GAM是一个不错的选择。它们适合于非线性或有噪声的数据。

    7 gam拟合

    那么,如何 为上述S型数据建立 GAM模型?

    图片

    在这里,我将使用三次样条回归 :

    gam(Y ~ s(X, bs="cr")

    上面的设置意味着:

    • s()指定滑器。还有其他选项,但是s是一个很好的默认选项

    • bs=“cr”告诉它使用三次回归样条('basis')。

    • s函数计算出要使用的默认结数,但是您可以将其更改为k=10,例如10个结。

    8模型输出:

    查看模型摘要:

    ## 
    ## Family: gaussian 
    ## Link function: identity 
    
    ## Parametric coefficients:
    ##             Estimate Std. Error t value Pr(>|t|)    
    ## (Intercept)  43.9659     0.8305   52.94   <2e-16 ***
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## Approximate significance of smooth terms:
    ##        edf Ref.df     F p-value    
    ## s(X) 6.087  7.143 296.3  <2e-16 ***
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## R-sq.(adj) =  0.876   Deviance explained = 87.9%
    ## GCV = 211.94  Scale est. = 206.93    n = 300
    • 显示了我们截距的模型系数,所有非光滑参数将在此处显示

    • 每个光滑项的总体含义如下。

    • 这是基于“有效自由度”(edf)的,因为我们使用的样条函数可以扩展为许多参数,但我们也在惩罚它们并减少它们的影响。

    9检查模型:

    该 gam.check() 函数可用于查看残差图,但它也可以测试光滑器以查看是否有足够的结来描述数据。但是如果p值很低,则需要更多的结。

    图片

    ## 
    ## Method: GCV   Optimizer: magic
    ## Smoothing parameter selection converged after 4 iterations.
    ## The RMS GCV score gradient at convergence was 1.107369e-05 .
    ## The Hessian was positive definite.
    ## Model rank =  10 / 10 
    ## 
    ## Basis dimension (k) checking results. Low p-value (k-index<1) may
    ## indicate that k is too low, especially if edf is close to k'.
    ## 
    ##        k'  edf k-index p-value
    ## s(X) 9.00 6.09     1.1    0.97

    10它比线性模型好吗?

    让我们对比具有相同数据的普通线性回归模型:

    anova(my\_lm, my\_gam)
    ## Analysis of Variance Table
    ## 
    ## Model 1: Y ~ X
    ## Model 2: Y ~ s(X, bs = "cr")
    ##   Res.Df   RSS     Df Sum of Sq      F    Pr(>F)    
    ## 1 298.00 88154                                      
    ## 2 292.91 60613 5.0873     27540 26.161 < 2.2e-16 ***
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

    我们的方差分析函数在这里执行了f检验,我们的GAM模型明显优于线性回归。

    11小结

    所以,我们看了什么是回归模型,我们是如何解释一个变量y和另一个变量x的。其中一个基本假设是线性关系,但情况并非总是这样。当关系在x的范围内变化时,我们可以使用函数来改变这个形状。一个很好的方法是在“结”点处将光滑曲线链接在一起,我们称之为“样条曲线”

    我们可以在常规回归中使用这些样条曲线,但是如果我们在GAM的背景中使用它们,我们同时估计了回归模型以及如何使我们的模型更光滑。

    上面的示例显示了基于样条的GAM,其拟合度比线性回归模型好得多。

    12用GAM进行建模用电负荷时间序列

    我已经准备了一个文件,其中包含四个用电时间序列来进行分析。数据操作将由data.table程序包完成。

    将提及的智能电表数据读到data.table

    DT <- as.data.table(read\_feather("ind"))

    使用GAM回归模型。将工作日的字符转换为整数,并使用recode包中的函数重新编码工作日:1.星期一,…,7星期日。

    DT\[, week_num := as.integer(car::recode(week,
        "'Monday'='1';'Tuesday'='2';'Wednesday'='3';'Thursday'='4';
        'Friday'='5';'Saturday'='6';'Sunday'='7'"))\]

    将信息存储在日期变量中,以简化工作。

    n_type <- unique(DT\[, type\])
    n_date <- unique(DT\[, date\])
    n_weekdays <- unique(DT\[, week\])
    period <- 48

    让我们看一下用电量的一些数据并对其进行分析。

    data\_r <- DT\[(type == n\_type\[1\] & date %in% n_date\[57:70\])\]
     
    ggplot(data\_r, aes(date\_time, value)) +
      geom_line() +
      theme(panel.border = element_blank(),
            panel.background = element_blank(),
            panel.grid.minor = element_line(colour = "grey90"),
            panel.grid.major = element_line(colour = "grey90"),
            panel.grid.major.x = element_line(colour = "grey90"),
            axis.text = element_text(size = 10),
            axis.title = element_text(size = 12, face = "bold")) +
      labs(x = "Date", y = "Load (kW)")

    图片

    在绘制的时间序列中可以看到两个主要的季节性:每日和每周。我们在一天中有48个测量值,在一周中有7天,因此这将是我们用来对因变量–电力负荷进行建模的自变量。

    训练我们的第一个GAM。通过平滑函数s对自变量建模,对于每日季节性,使用三次样条回归,对于每周季节性,使用P样条。

    gam_1 <- gam(Load ~ s(Daily, bs = "cr", k = period) +
                   s(Weekly, bs = "ps", k = 7),
                 data = matrix_gam,
                 family = gaussian)

    首先是可视化。

    layout(matrix(1:2, nrow = 1))
    plot(gam_1, shade = TRUE)

    图片

    我们在这里可以看到变量对电力负荷的影响。在左图中,白天的负载峰值约为下午3点。在右边的图中,我们可以看到在周末负载量减少了。

    让我们使用summary函数对第一个模型进行诊断。

    ## 
    ## Family: gaussian 
    ## Link function: identity 
    ## 
    ## Formula:
    ## Load ~ s(Daily, bs = "cr", k = period) + s(Weekly, bs = "ps", 
    ##     k = 7)
    ## 
    ## Parametric coefficients:
    ##             Estimate Std. Error t value Pr(>|t|)    
    ## (Intercept)  2731.67      18.88   144.7   <2e-16 ***
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## Approximate significance of smooth terms:
    ##              edf Ref.df     F p-value    
    ## s(Daily)  10.159 12.688 119.8  <2e-16 ***
    ## s(Weekly)  5.311  5.758 130.3  <2e-16 ***
    ## ---
    ## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    ## 
    ## R-sq.(adj) =  0.772   Deviance explained = 77.7%
    ## GCV = 2.4554e+05  Scale est. = 2.3953e+05  n = 672

    EDF:估计的自由度–可以像对给定变量进行平滑处理那样来解释(较高的EDF值表示更复杂的样条曲线)。P值:给定变量对因变量的统计显着性,通过F检验进行检验(越低越好)。调整后的R平方(越高越好)。我们可以看到R-sq.(adj)值有点低。

    让我们绘制拟合值:

    图片

    我们需要将两个自变量的交互作用包括到模型中。

    第一种交互类型对两个变量都使用了一个平滑函数。

    gam_2 <- gam(Load ~ s(Daily, Weekly),
              
     
    summary(gam_2)$r.sq
    ## \[1\] 0.9352108

    R方值表明结果要好得多。

    summary(gam_2)$s.table
    ##                     edf   Ref.df        F p-value
    ## s(Daily,Weekly) 28.7008 28.99423 334.4754       0

    似乎也很好,p值为0,这意味着自变量很重要。拟合值图:

    图片

    现在,让我们尝试上述变量交互。这可以通过function完成te,也可以定义基本函数。

    ## \[1\] 0.9268452

    与以前的模型相似gam_2

    summary(gam_3)$s.table
    ##                       edf   Ref.df        F p-value
    ## te(Daily,Weekly) 23.65709 23.98741 354.5856       0

    非常相似的结果。让我们看一下拟合值:

    图片

    gam_2模型相比,只有一点点差异,看起来te拟合更好。

    ## \[1\] 0.9727604
    summary(gam_4)$sp.criterion
    ##   GCV.Cp 
    ## 34839.46
    summary(gam_4)$s.table
    ##                       edf   Ref.df        F p-value
    ## te(Daily,Weekly) 119.4117 149.6528 160.2065       0

    我们可以在这里看到R方略有上升。
    让我们绘制拟合值:

    图片

    这似乎比gam_3模型好得多。

    ## \[1\] 0.965618
    summary(gam\_4\_fx)$s.table
    ##                  edf Ref.df        F       p-value
    ## te(Daily,Weekly) 335    335 57.25389 5.289648e-199

    我们可以看到R平方比模型gam_4低,这是因为我们过度拟合了模型。证明lambda和EDF的估计工作正常。

    因此,让我们在案例(模型)中尝试ti方法。

    ## \[1\] 0.9717469
    summary(gam_5)$sp.criterion
    ##   GCV.Cp 
    ## 35772.35
    summary(gam_5)$s.table
    ##                        edf     Ref.df          F p-value
    ## s(Daily)         22.583649  27.964970  444.19962       0
    ## s(Weekly)         5.914531   5.995934 1014.72482       0
    ## ti(Daily,Weekly) 85.310314 110.828814   41.22288       0

    然后使用t2

    ## \[1\] 0.9738273
    summary(gam_6)$sp.criterion
    ##   GCV.Cp 
    ## 32230.68
    summary(gam_6)$s.table
    ##                       edf   Ref.df        F p-value
    ## t2(Daily,Weekly) 98.12005 120.2345 86.70754       0

    我还输出了最后三个模型的GCV得分值,这也是在一组拟合模型中选择最佳模型的良好标准。我们可以看到,对于t2相应模型gam_6,GCV值最低。

    在统计中广泛使用的其他模型选择标准是AIC(Akaike信息准则)。让我们看看三个模型:

    AIC(gam\_4, gam\_5, gam_6)
    ##             df      AIC
    ## gam_4 121.4117 8912.611
    ## gam_5 115.8085 8932.746
    ## gam_6 100.1200 8868.628

    最低值在gam_6模型中。让我们再次查看拟合值。

    图片

    我们可以看到的模型的拟合值gam_4gam_6非常相似。可以使用软件包的更多可视化和模型诊断功能来比较这两个模型。

    第一个是function gam.check,它绘制了四个图:残差的QQ图,线性预测变量与残差,残差的直方图以及拟合值与因变量的关系图。让我们诊断模型gam_4gam_6

    gam.check(gam_4)

    图片

    ## 
    ## Method: GCV   Optimizer: magic
    ## Smoothing parameter selection converged after 7 iterations.
    ## The RMS GCV score gradiant at convergence was 0.2833304 .
    ## The Hessian was positive definite.
    ## The estimated model rank was 336 (maximum possible: 336)
    ## Model rank =  336 / 336 
    ## 
    ## Basis dimension (k) checking results. Low p-value (k-index<1) may
    ## indicate that k is too low, especially if edf is close to k'.
    ## 
    ##                      k'    edf k-index p-value
    ## te(Daily,Weekly) 335.00 119.41    1.22       1
    gam.check(gam_6)

    图片

    ## 
    ## Method: GCV   Optimizer: magic
    ## Smoothing parameter selection converged after 9 iterations.
    ## The RMS GCV score gradiant at convergence was 0.05208856 .
    ## The Hessian was positive definite.
    ## The estimated model rank was 336 (maximum possible: 336)
    ## Model rank =  336 / 336 
    ## 
    ## Basis dimension (k) checking results. Low p-value (k-index<1) may
    ## indicate that k is too low, especially if edf is close to k'.
    ## 
    ##                      k'    edf k-index p-value
    ## t2(Daily,Weekly) 335.00  98.12    1.18       1

    我们可以再次看到模型非常相似,只是在直方图中可以看到一些差异。

    layout(matrix(1:2, nrow = 1))
    plot(gam_4, rug = FALSE, se = FALSE, n2 = 80, main = "gam n.4 with te()")
    plot(gam_6, rug = FALSE, se = FALSE, n2 = 80, main = "gam n.6 with t2()")

    图片

    该模型gam_6 有更多的“波浪形”的轮廓。因此,这意味着它对因变量的拟合度更高,而平滑因子更低。

    vis.gam(gam_6, n.grid = 50, theta = 35, phi = 32, zlab = "",
            ticktype = "detailed", color = "topo", main = "t2(D, W)")

    图片

    我们可以看到最高峰值是Daily变量的值接近30(下午3点),而Weekly变量的值是1(星期一)。

    vis.gam(gam_6, main = "t2(D, W)", plot.type = "contour",
            color = "terrain", contour.col = "black", lwd = 2)

    图片

    再次可以看到,电力负荷的最高值是星期一的下午3:00,直到星期四都非常相似,然后负荷在周末减少。


    图片


    最受欢迎的见解

    1.在python中使用lstm和pytorch进行时间序列预测

    2.python中利用长短期记忆模型lstm进行时间序列预测分析

    3.使用r语言进行时间序列(arima,指数平滑)分析

    4.r语言多元copula-garch-模型时间序列预测

    5.r语言copulas和金融时间序列案例

    6.使用r语言随机波动模型sv处理时间序列中的随机波动

    7.r语言时间序列tar阈值自回归模型

    8.r语言k-shape时间序列聚类方法对股票价格时间序列聚类

    9.python3用arima模型进行时间序列预测

    展开全文
  • 广义可加模型GAM在python上的复现

    千次阅读 2020-11-08 19:33:50
    转自: 比较新的一篇GAM在python上的简易复现 https://blog.csdn.net/qq_41103204/article/details/104679779 目录 1 安装pyGAM 2 分类案例 2.1 基本使用 2.2 部分依赖图(Partial dependency plots) ...

     

    转自:  比较新的一篇GAM在python上的简易复现

    https://blog.csdn.net/qq_41103204/article/details/104679779


     

    目录

    1 安装pyGAM

    2 分类案例

    2.1 基本使用

    2.2 部分依赖图(Partial dependency plots)

    2.3 调整光滑度和惩罚

    2.4 自动调参

    3 完整的pyGAM模型

    4 测试参数

    4.1 测试惩罚项

    4.2 测试样条函数的数量

    4.3 测试不同的约束

    5 小问题



    1 安装pyGAM

    pip install pygam
    
    • 1

    在statsmodels.api中,也有GAM相关包。比如

    from statsmodels.gam.api import GLMGam, BSplines
    

    2 分类案例

    2.1 基本使用

    我们使用LogisticGAM来进行分类处理,通过load_breast_cancer来导入数据。

    import pandas as pd        
    from pygam import LogisticGAM
    from sklearn.datasets import load_breast_cancer
    
    #load the breast cancer data set
    data = load_breast_cancer()
    
    #keep first 6 features only
    df = pd.DataFrame(data.data, columns=data.feature_names)[['mean radius', 'mean texture', 'mean perimeter', 'mean area','mean smoothness', 'mean compactness']]
    target_df = pd.Series(data.target)
    df.describe()
    

    建立模型。

    X = df[['mean radius', 'mean texture', 'mean perimeter', 'mean area','mean smoothness', 'mean compactness']]
    y = target_df
    #Fit a model with the default parameters
    gam = LogisticGAM().fit(X, y)
    

    查看结果。summary()提供了很多统计量,比如AIC,UBRE,修正R^2。

    gam.summary()
    

    查看拟合准确率。

    gam.accuracy(X, y)
    

    2.2 部分依赖图(Partial dependency plots)

    gam的优势之一是,gam的可加性让我们能够控制其他变量,来探究和解释某一个变量。通过generate_X_grid来帮助我们产生合适的画图数据。

    lt.rcParams['figure.figsize'] = (28, 8)
    fig, axs = plt.subplots(1, len(data.feature_names[0:6]))
    titles = data.feature_names
    
    for i, ax in enumerate(axs):
        XX = gam.generate_X_grid(term=i)
        ax.plot(XX[:, i], gam.partial_dependence(term=i, X=XX))
        ax.plot(XX[:, i], gam.partial_dependence(term=i, X=XX,   width=.95)[1], c='r', ls='--')
        ax.set_title(titles[i])
    plt.show()
    

    部分依赖图
    我们能够看到一些有趣的结果,有一些变量和目标值之间有非常明显简单的线性关系;但是有一些变量和目标值之间有着很强的非线性关系。我们非常想要结合这些图像的可解释性,并且防止GAM过拟合,从而提出一个能够推广到持久数据集的模型。

    部分依赖图(Partial dependency plots)非常有用,因为他们具有高度的可解释性,并且易于理解。比如,在第一个测试结果中,我们可以说the mean radius of the tumor 和the response variable具有很强的关系;the mean radius of the tumor越大,是malignant(恶性)的可能性越大。

    对于其他的特征,比如the mean texture很难解释,并且我们已经推断我们希望有一条更平滑的曲线。(我的理解是,有先验知识的情况下,我们通过设置约束,强制让某一个特征对目标值有着单调递增或递减的特性,或者调整样条函数的数量。)

    2.3 调整光滑度和惩罚

    主要调整的参数有三个,n_splines,lam,和constraints。

    • n_splines:用来拟合的spline函数(样条函数)的数量
    • lam:惩罚项(在整个目标函数中乘以二阶导数)
    • constraints:允许用户指定函数是否应具有单调约束的约束列表。包括[‘convex’, ‘concave’, ‘monotonic_inc’, ‘monotonic_dec’,’circular’, ‘none’]

    默认情况下:

    • n_splines = 25
    • lam = 0.6
    • constraints = None

    更改n_splines让曲线变得更光滑。(值得注意的是,如果惩罚项,如果对于每一个特征都是一样的值,则不需要写成list形式;如果不一样的值,那么可以写成列表)

    lambda_ = 0.6
    n_splines = [25, 6, 25, 25, 6, 4] 
    constraints = None
    gam = LogisticGAM(constraints=constraints, 
              lam=lambda_,
             n_splines=n_splines).fit(X, y)
    

    画出图像后,可以看到,之前不平滑的特征部分依赖图(partial dependency plots)变得平滑了。
    部分依赖图2
    如果我们强制平滑后,准确度下降了,说明我们损失了一部分信息(没有捕捉到部分信息),不过同样,准确度的下降也表明我们可以将多少我们的直觉加入到模型中。

    参数lam控制着惩罚程度,就算我们将n_splines设置的很大,但是惩罚很大的话,函数图像可能仍然会出现直线。

    2.4 自动调参

    通过gridsearch来自动选择参数。默认参数是一个字典类型的lam,{‘lam’:np.logspace(-3,3,11)}

    gam = LogisticGAM().gridsearch(X, y)
    

    有三种方式:

    1、通过网格,将grid变成list,搜寻的数量一共有2**6个。(6个特征)

    >>> lam = np.logspace(-3, 3, 2)
    >>> lams = [lam] * 6
    >>> gam.gridsearch(X, y, lam=lams)
    

    2、直接将网格变成np.ndarray,当搜索的空间非常大的时候,我们会随机进行搜索。

    >>> lams = np.exp(np.random.random(50, 4) * 6 - 3)
    >>> gam.gridsearch(X, y, lam=lams)
    

    3、copying grids for parameters with multiple dimensions. if we specify a 1D np.ndarray for lam, we are implicitly testing the space where all points have the same value

    >>> gam.gridsearch(lam=np.logspace(-3, 3, 11))
    

    或者

    >>> lam = np.logspace(-3, 3, 11)
    >>> lams = np.array([lam] * 4)
    >>> gam.gridsearch(X, y, lam=lams)
    

    3 完整的pyGAM模型

    使用留出数据集是最好的权衡模型的偏差-方差的方法。pyGAM很好地适应sklearn的工作流程,因此这一步骤很像拟合sklearn模型。

    首先是分离训练集和测试机。

    import numpy as np
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
    gam = LogisticGAM().gridsearch(X_train, y_train)
    

    预测。

    from sklearn.metrics import accuracy_score
    from sklearn.metrics import log_loss
    predictions = gam.predict(X_test)
    print("Accuracy: {} ".format(accuracy_score(y_test, predictions)))
    probas = gam.predict_proba(X_test)      
    print("Log Loss: {} ".format(log_loss(y_test, probas))
    

    下面,减小样条函数(spline)的数量,来看一下准确率。

    lambda_ = [0.6, 0.6, 0.6, 0.6, 0.6, 0.6]
    n_splines = [4, 14, 4, 6, 12, 12] 
    constraints = [None, None, None, None, None, None]
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
    gam = LogisticGAM(constraints=constraints, 
                      lam=lambda_,
                     n_splines=n_splines).train(X_train, y_train)
    predictions = gam.predict(X_test)
    print("Accuracy: {} ".format(accuracy_score(y_test, predictions)))
    probas = gam.predict_proba(X_test)      
    print("Log Loss: {} ".format(log_loss(y_test, probas)))
    

    4 测试参数

    使用LinearGAM,进行测试。

    from sklearn.datasets import load_boston
    from pygam import LinearGAM
    
    boston = load_boston()
    df = pd.DataFrame(boston.data, columns=boston.feature_names)
    target_df = pd.Series(boston.target)
    df.head()
    

    4.1 测试惩罚项

    lambda_list = [0.01, 0.1, 1, 10, 100]
    for lambda_ in lambda_list:
        constraints = None
        gam = LinearGAM(constraints=constraints, 
                        lam=lambda_).fit(X.values, y)
        print(f'\nlambda_: {lambda_}')
        plot_feature_plot(gam)
    

    测试1
    测试2

    根据图像可以看出,惩罚越大,拟合的曲线越平滑。

    4.2 测试样条函数的数量

    n_splines_list = [[4]*13, [10]*13, [100]*13, [1000]*13]
    for n_splines in n_splines_list:
        constraints = None
        gam = LinearGAM(constraints = constraints, 
                        n_splines = n_splines).fit(X.values, y)
        print(f'\nlambda_: {n_splines}')
        plot_feature_plot(gam)
    

    4,10
    2-2
    样条函数越多,拟合越好,但是过多之后,会出现过拟合。

    4.3 测试不同的约束

    constraints_list = ['convex', 'concave', 'monotonic_inc', 'monotonic_dec', 'none']# circular这里无法使用
    for constraints in constraints_list:
        gam = LinearGAM(constraints = constraints).fit(X.values, y)
        print(f'\nconstraints: {constraints}')
        plot_feature_plot(gam)
    

    3-1
    3-2
    3-3

    5 小问题

    计算准确率的时候

    回归的暂时无法使用
    LinearGAM.score(X, y)

    分类可以使用
    LogisticGAM.accuracy(X, y)

    参考资料:
    https://codeburst.io/pygam-getting-started-with-generalized-additive-models-in-python-457df5b4705f
    https://pygam.readthedocs.io/en/latest/index.html

    展开全文
  • 无Group卷积的空间注意力子模块如图3所示: Pytorch实现GAM注意力机制 import torch.nn as nn import torch class GAM_Attention(nn.Module): def __init__(self, in_channels, out_channels, rate=4): ...
  • linear prodictor 我能拿它做什么呀?我想做pm2.5与温度交互下某种疾病死亡预估的三维曲面图 但vis.gam出来的z轴是linear prodictor是个啥 哪位知道,怎么把他换成自己数据变量
  • GAM进行建模时间序列 我已经准备了一个文件,其中包含四个用电时间序列以进行分析。数据操作将由data.table程序包完成。 将提及的智能电表数据读到data.table。 DT <- as.data.table(read_feather("DT_4_...
  • 我们可以对其进行绘图以查看发生了什么 plot(u,v,type="l") points(INSYS,PRONO) abline(v=c(5,15,25,55) 使用bs()线性样条曲线 使用GAM模型,情况略有不同。我们将在这里使用所谓的 b样条曲线, 我们可以用边界...
  • GAM背后的原理与回归相似,不同之处在于代替各个预测因子的求和效应,GAM是平滑函数的总和。函数允许我们对更复杂的模式进行建模,并对它们进行平均,以获得更平滑的平滑曲线。 因为GAM是基于函数而不是变量的,...
  • GAM541引擎

    2021-02-13 12:02:53
    GAM541引擎
  • 1gam-breakout

    2021-06-23 21:27:36
    1gam-breakout 使用的工具和库: 、 、 、 、 、 、 来自背景。 。
  • 多轨迹重建GAM; 在这里,我们总结了数据,代码和必要的文档。 我们使用Matlab和R作为我们的工具,并将代码集成为名为“ trajectory.mlapp”的.mlapp在名为“ LoMcT”的文件夹中,以方便使用。 Anthus_spragueii....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,686
精华内容 2,274
关键字:

gam