当前位置:网站首页 > 技术博客 > 正文

什么是交叉验证



​ 通过对预测函数参数的训练,并在相同的数据集上进行测试,是一个错误的方法论:如果一个模型对相同样本标签进行训练和测试,模型的得分会很高,但在实验数据上的表现会很差,这种情况被称为过拟合。为了避免过拟合,在执行有监督的机器学习“实验”时,常见的方法是将已有数据集中保留一部分数据作为测试集,即Xtest, Ytest。需要注意的是:“实验”并不仅用于学术领域,因为在商业领域中,机器学习通常也是以实验为开端。如下是一个交叉验证流程图。最优参数选择可以参考grid search。

​ 在scikit-learn中,随机切分数据集为训练集和测试集可以使用train_test_split帮助函数。

​ 如:使用莺尾花数据集(iris data)拟合一个线性支持向量机模型。

使用部分数据来训练模型,并用剩余40%的数据来对模型分类效果进行评估:

 

​ 但是,当把整个数据集分为上述三个集合时,大大降低可用于建模的数据量。从而,模型的评估结果取决于对训练集和验证集的某种随机划分。

​ 解决上述问题的一个方法是交叉验证(corss-validation,简称CV)。当应用交叉验证的方法时,不再需要划分验证集,而测试集始终应用于模型的最终评估。最基本的交叉验证方法是K折交叉验证(k-fold CV),它是指将训练集划分为k个最小的子集(其它的方法将在下文介绍,当均具有相同的原理)。如下的过程应用k“折叠”中的一个:

  • 将k-1个子集用于模型训练;
  • 模型表现是由k折交叉验证的结果表示的,它是上述步骤循环结果的平均值。这个方法计算成本高,但不会浪费很多数据(如下图每一个例子中,固定一个随机验证集),上述方法在如下问题中,譬如样本数据非常小的反向推演,具有显著优势。

    用剩余数据验证上一步中建立的模型(类似于利用测试集计算模型的准确率)。

​ 在数据集和估计器上应用交叉验证最简单的方法是调用cross_val_score帮助函数。

​ 随后的例子将会说明在莺尾花(iris)数据集上,如何通过划分数据集、训练模型和计算5次交叉验证的得分,从而估计一个线性核支持向量机的准确率(每次使用不同的拆分)。

​ 如下是在95%置信区间上的平均得分为:

​ 默认的交叉验证迭代的输出结果是参数为score的估计器,通过修改scoring的参数可以修改估计器:

​ 参见 The scoring parameter: defining model evaluation。在上述莺尾花数据集(Iris dataset)的例子中,样本标签是均衡的,因此计算的准确率和F1-score几乎相等。

​ 当参数cv是一个整数时,cross_val_score的初始参数为KFold或StratifiedKFold,当模型的估计器来自于ClassifierMixin时,使用后一种参数。

​ 也可以通过传入交叉验证迭代器,来使用交叉验证的策略对模型进行评估,如:

​ 另一种选择时使用可迭代的数据集拆分(训练集,测试集)方式作为数组的索引,例如:

使用保留的数据进行数据转化

​ 正如对从训练数据中拆分的数据进行预测评估是重要的,预处理(如标准化、特征选择等)和类似的数据转换同样应从训练集中学习,并应用于剩余的数据以进行预测评估:

​ Pipeline库使编写估计器更加容易,在交叉验证下提供这种方法:

参见 管道和复合估计器。

cross_validate与cross_val_score存在两方面不同:

  • 它允许制定多个评估指标,
  • 对于单一的评估指标,scoring参数是一个字符串类型,可调用的对象或者空值,关键词可能如下:

    ['test_score', 'fit_time', 'score_time']

    而对于多参数评估指标,输入如下关键词将会返回值是一个字典类型:

    ['test<score1_name>', 'test<score2_name>', 'test_<scorer...>', 'fit_time', 'score_time']

    return_train_score的初始值是False,以便节省计算时间。如果需要输出训练集的得分,则需要将参数修改为True。

    如果想获得模型在每个训练集上拟合的估计器,则需要设置return_estimator = True。

    多个指标的传入可以是列表,元组或预定义的评分器名称:

    也可以用字典映射一个预定义的评分器或者自定义评分器函数:

    如下是使用单一参数的cross_validate的例子:

    它返回一个字典,包含拟合时间,得分时间(以及可选输出项训练分数和评估器),另外还会输出测试集得分。

​ cross_val_predict函数与cross_val_score具有类似的界面,返回的是每一个属于测试集数据的预测值。只有交叉验证的策略允许测试集一次使用所有数据(否则,将会报错)。

警告:不正确使用cross_val_predict的报警

​ cross_val_predict的结果可能与cross_val_score的结果不同,因为数据会以不同的方式进行分组。cross_val_score函数是交叉验证的平均值,而cross_val_predict仅返回标签(或者标签的概率)来源于不同的输入学习器(这里的翻译看的知乎https://zhuanlan.zhihu.com/p/)。 因此,cross_val_predict不是一个适宜的度量泛化误差的方法。

​ cross_val_predict函数适合的场景如下:

  • 从不同模型中获得预测值的可视化。
  • 随后将介绍可用的交叉验证迭代器。

    例子:

    模型混合:在集成方法中,当一个有监督估计器的预测值被应用于训练另一个估计器。
  • 带交叉验证的ROC曲线,
  • 带交叉验证的递归特征消除,
  • 使用带有交叉验证的网格搜索进行参数估计,
  • 用于文本特征提取和评估的示例管道,
  • 绘制交叉验证预测,
  • 嵌套与非嵌套交叉验证。

​ 随后的部分列出了一些用于生成索引标号,用于在不同的交叉验证策略中生成数据划分的工具。

​ 假设一些数据是独立同分布的,假定所有的样本来自于相同的生成过程,并且生成过程假设不基于对过去样本的记忆。

​ 随后的交叉验证会被用于如下的例子。

注意:

​ 尽管独立同分布的数据在机器学习理论中是一个普遍的假设,但它很少存在于实际生活中。假设某样本的生成是一个的过程,那么使用时间序列感知交叉验证方案会更安全。同样的,如果已知样本生成过程具有group structure(团体结构)性质(样本来自于不同的主体,实验和测量工具),就可以更安全的使用group-wise cross-validation。

​ KFold将所有的样本分为k组,被称为折叠(如果k=n,等价于Leave One Out(留一)策略),每个子样本组的数据量相同(如果可能)。预测函数将会使用k-1个折叠中的数据进行学习,剩余的折叠将会被用于测试。

例如四个样本集的2折交叉验证:

​ 下图是交叉验证的可视化。注意KFold并不受类别或者组别的影响。

​ 每一个折叠都有两个数组构成:第一个是训练集,第二个是测试集。因此,可以使用numpy索引建立训练/测试集合:

​ RepeatedKFold重复K-Fold n次。该方法可以用于需要执行n次KFold的情形,在每个循环中会生成不同的分组。

2折K-Fold重复2次示例:

​ 类似的,RepeatedStratifiedKFold是在每个重复中以不同的随机化重复n次分层的K-Fold。

​ LeaveOneOut(或LOO)是一个简单的交叉验证。每个学习集都是去除一个样本后的剩余样本,测试集是余下样本。因此,对于n个样本而言,就会有n个不同的训练集和n个不同的测试集。这个交叉验证的过程不会浪费很多数据,因为只有一个数据从训练集中移出。

​ LOO潜在的用户选择模型应该考虑一些已知警告。当与k-fold交叉验证做比较时,当n>k时,留一法可以从n个样本中构建n个模型,而不是k个模型。进一步,每一个模型都是在n-1个样本上进行训练,而不是在(k-1)n/k。两种方法都假设k不是很大,并且k<n,LOO比k-fold交叉验证的计算成本高。

​ 就正确率而言,LOO经常导致高方差(测试误差的估计器)。直观地说,因为用n个样本的n-1个样本构建模型,由折叠构建的模型实际上是相同的,且相同于由整个数据集构建的模型。

​ 但是,如果学习曲线相对于训练集的大小是陡峭的,那么5-或者10-折交叉验证会高估模型的泛化误差。

​ 作为通用规则,大多数作者,及实际经验表明,5-或者10-交叉验证会优于LOO。

参考文献:

  • http://www.faqs.org/faqs/ai-faq/neural-nets/part3/section-12.html;
  • T. Hastie, R. Tibshirani, J. Friedman, The Elements of Statistical Learning, Springer 2009
  • L. Breiman, P. Spector Submodel selection and evaluation in regression: The X-random case, International Statistical Review 1992;
  • R. Kohavi, A Study of Cross-Validation and Bootstrap for Accuracy Estimation and Model Selection, Intl. Jnt. Conf. AI
  • R. Bharat Rao, G. Fung, R. Rosales, On the Dangers of Cross-Validation. An Experimental Evaluation, SIAM 2008;
  • G. James, D. Witten, T. Hastie, R Tibshirani, An Introduction to Statistical Learning, Springer 2013.

​ LeavePOut与LeaveOneOut相类似,因为它通过从整个数据集中,删除p个样本点来创建所有可能的训练集/测试集。对于n个样本量,它产生了种训练-测试组合。与LeaveOneOut和KFold不同的是,当p>1时,测试集将会重叠。

​ 在只有四个样本的数据集上使用Leave-2-Out示例:

ShuffleSplit

ShuffleSplit迭代器会产生一个由用户定义数值,独立的训练集/测试集划分。样本首先被打乱,然后划分为训练集和测试集的组合。

通过设置种子random_state伪随机数发生器,可以再现随机切分数据集的结果。

以下是使用示例:

下图是交叉验证原理的可视化。注意ShuffleSplit不受类别或组的影响。

ShuffleSplit是KFold交叉验证好的替代选择,它允许数量或比例控制训练/测试集的划分方式。

​ 一些分类问题会表现出极大不均衡的样本类别分布:例如正样本是负样本的许多倍。在一些案例中,推荐使用分层抽样的方法,以确保相关类别的频率在训练集和验证折叠中大致一致,可以用StratifiedKFold和StratifiedShuffleSplit实现。

​ StratifiedKFold是k-fold的变种,它返回分层的折叠:每个集合的标签分布比例与整个数据集几乎相同。

​ 如下是一个在包含50个样本,分为两类别的不平衡数据集上,进行3折交叉验证的例子。该例子将展示每个类别的样本量,并与KFold进行比较。

​ StratifiedKFold在训练集和测试集中保存了各类别的相同比例(大约1/10)。

​ 下图是交叉验证原理的可视化。

​ RepeatedStratifiedKFold可以在每一次循环中,重复n次不同随机选择的分层k折。

​ StratifiedShuffleSplit是shuffleSplit的变种,它返回分层的样本拆分,例如在拆分的各数据集中,保留与整个样本数据集相同的样本比例。

​ 下图为交叉验证原理的可视化。

​ 如潜在的样本生成过程生成非独立的样本组,则独立同分布的假设将不适用。

​ 这样的样本分组是应用于特定领域的。如下是一个从不同病人处收集的医学数据,每一位患者提供多个样本。并且这些数据很可能依赖于各自的组。在这个例子中,每个样本的患者id是其组标识符。

​ 上述案例中,在特定组上训练的模型,是否能很好的概括看不见的组将是关注重点。为了衡量它,需要确保验证集中的所有样本不会在与之配对的训练折叠中出现。

​ 在随后的交叉验证数据划分可以实现上述功能。样本中的组标识将通过groups参数进行定义。

​ GroupKFold是k折的一个变种,它确保相同的组不会同时出现在测试集和训练集中。例如,如果数据来自不同的受试者,且每个受试者提供多个样本,同时,如果模型可以灵活学习高度具体化的特征,它就不能概括其它受试者的特征。GroupKFold方法使模型可以察觉到上述过拟合情形。

​ 假设有三个受试者,每个受试者都有一个从1到3的关联数字:

​ 每个受试者在不同的测试折中,相同的受试者不会同时出现在测试集和训练集中。需要注意的是,由于数据的不均衡问题,每个折叠含有不同的数据量。

​ 下图是交叉验证原理的可视化。

​ LeaveOneGroupOut是一个交叉验证方案,它根据第三方提供的整数组的数组来提供样本。这个组信息可用于编码任意域特定的预定义交叉验证折叠。

​ 每一个训练集包含除特定组以外的所有样本。

​ 在多次实验的例子中,LeaveOneGroupOut可以建立一个基于不同实验的交叉验证:创建一个除某一实验样本外的所有实验样本的训练集:

​ 另外一个常见应用是使用时间信息:例如,组可以是收集样本的年份,从而允许对基于时间的拆分进行交叉验证。

​ 对于训练/测试集而言,LeaveGroupOut与LeaveOneGroupOut相类似,但移除与P组相关的数据。

​ 留2组交叉验证的例子:

​ GroupShuffleSplit迭代器表现为ShuffleSplit和LeavePGroupsOut的结合,并生成一个随机分区的序列,并为每一个分组提供一个组子集。

​ 如下示例:

​ 交叉验证原理的可视化:

​ 当需要LeavePGroupsOut的功能时,这个分类非常有用,但是当组的个数足够大时,保留P组的分区成本将很高。在这种情形中,GroupShuffleSplit通过LeavePGroupsOut提供一个随机(可重复)的训练/测试集划分。

​ 对于一些数据集,一个预定义的数据集划分训练-和验证折叠或一些交叉验证折叠已经存在。例如当需要搜索超参数时,可以使用PredefinedSplit来使用这些折叠。

​ 例如,当使用验证集时,设置所有样本的test_fold为0,以将其归为验证集。并设置剩余样本得到该参数为-1。

​ 时间序列数据的特点是观测值间的相关性与时间趋势相关(自相关)。但是,传统的交叉验证技术例如KFold和ShuffleSplit均假定样本的独立同分布,并且会造成训练集和测试集间难以解释的相关性(估计出较差的泛化误差)在时间序列的数据集中。因此,评估模型对观测“未来”值的时间序列数据至关重要,而不仅是用于训练模型。为了完成这个目标,可以使用TimeSeriesSplit。

​ TimeSeriesSplit是一个k-fold变种,它返回前k折作为训练集,同时第(k+1)折作为测试集。需要注意的是,与标准的交叉验证法不同,连续的训练集是前面数据集的超集。并且,会将多余的数据放到用于训练模型的第一个训练分区。

​ 这些分类可被用于固定时间被观测的交叉验证时间序列数据样本。

​ 例如在6个样本上进行3-split 时间序列交叉验证:

​ 交叉验证原理可视化如下所示:

​ 如果数据的顺序不是随机的(例如具有相同类别标签的样本连在一起),先把数据打乱对于获得有价值的交叉验证结果是有意义的。但是,如果样本不是独立同分布的,则结果可能相反。例如,如果样本数据是关于“文章发表”的,并且发表时间符合时间序列,则打乱数据会导致模型过拟合及过高的验证集分数:这是人为导致训练集与验证集相类似(时间趋势相似)的结果。

​ 一些交叉验证迭代器具有内置选项在拆分数据集前打乱数据索引。注意:

  • 相比直接打乱数据,它消耗更少内存。
  • 初始化是不打乱数据,包括:通过给cross_val_score,网格搜索等定义cv=some_integer来执行(分层的)K折交叉验证。但train_test_split会返回一个随机划分。
  • random_state参数的初始值是None,意味着KFold(..., shuffle = True)每次迭代的结果不同。但是GridSearchCV调用fit方法,对同一组参数使用相同的打乱方式。
  • 如想获取相同的拆分结果,需设置random_state为整数。

​ 交叉验证迭代器也可以直接用于模型选择,如获得模型最佳超参数的网格搜索。下一节的话题是:调整估计器的超参数。

我们很高兴地宣布, 发布了 scikit-learn 0.23!许多bug被修复及改进,以及一些新的关键特性。我们将在下面详细介绍这个版本的几个主要特性。有关所有更改的详尽清单,请参阅发布说明。

若要安装最新版本(使用pip),请执行以下操作:

或者使用conda

等待已久的具有非正常损失函数的广义线性模型现在可用了.特别是,实现了三个新的回归器:、 和。泊松回归(Poisson regressor )可以用来模拟正整数计数或相对频率。在用户指南中阅读更多内容。此外,也支持一个新的‘泊松’损失( ‘poisson’ loss)。

现在,通过启用选项,可以在笔记本中可视化估计器。这特别有助于总结管道(pipelines)和其他复合估计器的结构,并具有交互性以提供详细信息。单击下面的示例图像以展开管道元素。有关如何使用此功能,请参见可视化组合估计器。

KMeans估计器是完全重新写的,现在它更快,更稳定。此外,Elkan算法现在与稀疏矩阵兼容。估计器使用的是基于OpenMP的并行性,而不是依赖于jowb,因此 参数不再起作用。有关如何控制线程数量的详细信息,请参阅我们的并行性说明。

对 和 。作了不同的改进。在上述泊松损失的基础上,这些估计器现在支持样本权重。此外,还添加了一个自动早期停止标准:当样本数超过10k时,默认情况下启用早期停止。最后,用户现在可以定义单调约束来根据特定特征的变化来约束预测。在下面的例子中,我们构造了一个通常与第一个特征正相关的目标,其中含有一些噪声。应用单目标约束条件,预测可以捕捉第一个特征的全局效应,而不是对噪声进行拟合。

两个线性回归器 和 现在支持样本权重。

脚本的总运行时间:(0分1.299秒)

注意 单击此处下载完整的示例代码,或通过Binder在浏览器中运行此示例

有关列子在模块中。

此示例演示如何使用谱协聚类算法(pectral Co-Clustering algorithm)生成数据集和双光泽数据集。

数据集是使用函数生成的,该函数创建一个小值矩阵和具有较大值的集群。然后对行和列进行洗牌,并将其传递给谱协聚类算法。重新排列洗牌矩阵,使集群连续显示,该算法明确的表明地找到了集群。

脚本的总运行时间:(0分钟0.292秒)

这是scikit-learn的类和函数参考。请参阅完整的用户指南以获取更多详细信息,因为类和函数的原始规范可能不足以提供有关其用法的完整指南。有关在API上重复的概念的参考,请参阅“通用术语表和API元素”。

所有估计量的基类。

用于投票分类器

校准预测概率。

用户指南:有关更多详细信息,请参见“概率校准”部分。

该模块收集了流行的无监督聚类算法。

用户指南:有关更多详细信息,请参见“ 聚类“和”双聚类“部分。

用于使用Transformer转换器构建复合模型的元估计器

除了当前的内容外,这个模块最终将成为Pipeline和FeatureUnion的翻新版本。

用户指南:有关更多详细信息,请参见“ 管道和复合估计器”部分。

模块包括可靠地估计给定一组点的特征的协方差的方法和算法。定义为协方差的逆的精度矩阵也被估计。协方差估计与高斯图形模型理论密切相关。

用户指南:有关更多详细信息,请参见“协方差估计”部分。

用户指南:有关更多详细信息,请参见“ 交叉分解”部分。

该模块包括用于加载数据集的实用程序,包括用于加载和获取流行的参考数据集的方法。它还具有一些人工数据生成器。

用户指南:有关更多详细信息,请参见“ 数据集加载实用程序”部分。

该模块包括矩阵分解算法,其中包括PCA,NMF或ICA。该模块的大多数算法都可以视为降维技术。

用户指南:有关更多详细信息,请参见"分解组件中的信号(矩阵分解问题)"部分。

线性判别分析和二次判别分析

用户指南:有关更多详细信息,请参见“ 线性和二次判别分析”部分。

用户指南:有关更多详细信息,请参阅指标和评分:量化预测的质量部分。

该模块包括基于集成的分类,回归和异常检测方法。

用户指南:有关更多详细信息,请参见集成方法部分。

该模块包括scikit-learn中使用的所有自定义警告和错误类。

该模块提供了可导入的模块,这些模块允许使用实验性功能或估算器。

实验性的功能和估计器不受弃用周期的限制。使用它们需要您自担风险!

该模块负责从原始数据中提取特征。当前,它包括从文本和图像中提取特征的方法。

用户指南:有关更多详细信息,请参见特征提取部分。

该子模块收集实用程序以从图像中提取特征。

该子模块收集实用程序以从文本文档构建特征向量。

该模块实现特征选择算法。目前,它包括单变量过滤器选择方法和递归特征消除算法。

用户指南:有关更多详细信息,请参见“特征选择”部分。

该模块实现基于高斯过程的回归和分类。

用户指南:有关更多详细信息,请参见“ 高斯过程”部分。

内核:

缺失值估算的转换器

用户指南:有关更多详细信息,请参见缺失值的插补部分。

该模块包括用于模型检查的工具。

用户指南:有关更多详细信息,请参见“等渗回归”部分。

该模块基于傅立叶变换实现了几个近似的内核特征图。

用户指南:有关更多详细信息,请参见“内核近似”部分。

模块实现内核岭回归。

用户指南:有关更多详细信息,请参见“ 内核岭回归”部分。

| ([alpha,kernel,...]) |内核岭回归。 |

该模块实现了各种线性模型。

用户指南:有关更多详细信息,请参见“ 线性模型”部分。

以下小节仅是粗略的指导原则:相同的估算器可以根据其参数分为多个类别。

以下估计器具有内置的特征选择拟合程序,但是任何使用L1或弹性网惩罚的估计器也将执行特征选择:通常 或具有适当的罚分。

这些估计器共同拟合多个回归问题(或任务),同时得出稀疏系数。尽管推断的系数在任务之间可能有所不同,但它们被约束为在选定的特征(非零系数)上达成一致。

使用Huber损失的任何估计量也将对异常值具有鲁棒性,例如 使用。

这些模型允许响应变量具有除正态分布之外的其他误差分布:

该模块实现数据嵌入技术。

用户指南:有关更多详细信息,请参见“流形学习”部分。

有关更多详细信息,请参阅用户指南的“指标和评分:量化预测的质量”部分和“成对度量,近似关系和内核”部分。

该模块包括评分功能,性能指标以及成对指标和距离计算。

有关更多详细信息,请参见用户指南的“评分参数:定义模型评估规则”部分。

有关更多详细信息,请参见用户指南的“ 分类指标”部分。

有关更多详细信息,请参见用户指南的"回归指标"部分。

有关更多详细信息,请参见用户指南的“ 多标签排名指标”部分。

有关更多详细信息,请参见用户指南的“ 聚类性能评估”部分。

该子模块包含用于聚类分析结果的评估指标。评估有两种形式:

  • 监督,它为每个样本使用基本事实类别值。
  • 无监督的,它不会并且无法衡量模型本身的“质量”。

有关更多详细信息,请参见用户指南的"分类评估"部分。

| (a, b, *[, similarity]) | 两个簇的相似性。 |

有关更多详细信息,请参见用户指南的"成对度量,近似关系和内核"部分。

有关更多详细信息,请参见用户指南的“ 可视化”部分。

该模块实现了混合建模算法。

用户指南:有关更多详细信息,请参见“ 高斯混合模型”部分。

用户指南:请参阅交叉验证:评估模型表现,调整估计器的超参数和 学习曲线部分,以了解更多详细信息。

该模块实现了多类学习算法:

  • 一对剩余/一对全部
  • 一对一
  • 纠错输出代码

此模块中提供的估计器是元估计器:它们需要在其构造函数中提供基本估计器。例如,可以使用这些估计器将二进制分类器或回归器转换为多类分类器。也可以将这些估计器与多类估计器一起使用,以期提高其准确性或运行时性能。

scikit-learn中的所有分类器均实现多类分类;仅当您要尝试使用自定义多类别策略时,才需要使用此模块。

相对于其余的元分类器也实现了一种方法,只要该方法由基本分类器实现即可。该方法在单标签和多标签情况下都返回类成员资格的概率。请注意,在多标签情况下,概率是给定样本属于给定类别的边际概率。这样,在多标签情况下,给定样本的所有可能标签上的这些概率之和不会像在单标签情况下那样合计为一。

用户指南:有关更多详细信息,请参见“多类和多标签算法”部分。

该模块实现多输出回归和分类。

此模块中提供的估计器是元估计器:它们需要在其构造函数中提供基本估计器。元估计器将单输出估计器扩展到多输出估计器。

用户指南:有关更多详细信息,请参见“ 多类和多标签算法”部分。

该模块实现了朴素贝叶斯算法。这些是基于贝叶斯定理和强(朴素)特征独立性假设的监督学习方法。

用户指南:有关更多详细信息,请参见“ 朴素贝叶斯”部分。

该模块实现k近邻算法。

用户指南:有关更多详细信息,请参见“ 最近邻”部分。

该模块包括基于神经网络的模型。

用户指南:有关更多详细信息,请参见神经网络模型(受监管)和神经网络模型(无监管)部分。

该模块实现实用程序以构建复合估计器,作为转换和估计器链。

用户指南:有关更多详细信息,请参见“ 管道和复合估计器”部分。

该模块包括缩放,居中,归一化,二值化方法。

用户指南:有关更多详细信息,请参见“ 预处理数据”部分。

随机投影转换器

随机投影是一种简单且计算有效的方法,可通过以可控制的精度(以附加方差)为代价来减少数据的维数,以缩短处理时间并缩小模型尺寸。

控制随机投影矩阵的尺寸和分布,以保留数据集的任何两个样本之间的成对距离。

随机投影效率背后的主要理论结果是 Johnson-Lindenstrauss引理(引用Wikipedia):

用户指南:有关更多详细信息,请参见“ 随机投影”部分。

该模块实现了半监督学习算法。这些算法将少量标记的数据和大量未标记的数据用于分类任务。该模块包括标签传播。

用户指南:有关更多详细信息,请参见“ 半监督学习”部分。

该模块包括支持向量机算法。

用户指南:有关更多详细信息,请参见“支持向量机”部分。

该模块包括用于分类和回归的基于决策树的模型。

用户指南:有关更多详细信息,请参见“ 决策树”部分。

| (决策树, *[, …]) | 绘制决策树。 |

该模块包括各种实用程序。

来自joblib的实用程序:

随机森林分类器显示相反的行为:直方图显示接近峰值。0.2和0.9的概率,而概率接近0或1是非常罕见的。Nculescu-Mizil和Caruana [1]给出了对此的解释:“装袋和随机森林等方法--从一组基本模型的平均预测做出的预测接近0和1是很难的,因为底层基本模型中的方差会导致预测偏差,这些预测值本应该是0或者1, 但是却偏离了这些值。由于预测仅限于区间[0,1],由方差引起的误差往往是近0和1的单边误差。例如,如果一个模型应该对一个情况预测p=0,那么bagging法可以实现的唯一方法就是所有bagging中的树都预测为零。如果将噪声加到bagging中的树木上,这种噪声会导致一些树预测值大于0,从而使bagging集合的平均预测值从0偏离。我们在随机森林中观察到的这种影响最强烈,因为使用随机森林训练的基层树由于特征子集而具有较高的方差。“结果表明,校准曲线呈现出sigmoid形状,表明分类器可以更多地信任它的“直觉”,并返回接近0或1的典型概率。

注意 单击此处下载完整的示例代码,或通过Binder在浏览器中运行此示例

简单使用各种交叉分解算法: PLSCanonical - PLSRegression, 多变量响应, PLS2 - PLSRegression单变量响应, PLS1 - CCA。

给定两个多元共变二维数据集X和Y,PLS提取协方差方向,即解释两个数据集之间最大共享方差的每个数据集的分量。这一点在散点矩阵图中有展示, 数据集X和数据集Y中的成分1是最大相关(点位于第一对角线周围)。这对于两个数据集中的成分2也是如此,但是,不同组件的数据集之间的相关性很弱:点云是非球面的。

脚本的总运行时间:(0分0.237秒)

用决策树进行一维的回归。

利用决策树对正弦曲线进行加噪观测拟合。因此,它学习了近似正弦曲线的局部线性回归。

我们可以看到,如果将树的最大深度(由参数控制)设置得太大,则决策树学习训练数据的细节太细,并从噪声中学习,即过拟合。

脚本的总运行时间:(0分0.092秒)

  • 上一篇: linux系统版本怎么查
  • 下一篇: java shopping
  • 版权声明


    相关文章:

  • linux系统版本怎么查2024-12-12 09:01:01
  • 单例设计模式例子2024-12-12 09:01:01
  • 内连接和外连接的区别SQL2024-12-12 09:01:01
  • maven导入本地jar包命令2024-12-12 09:01:01
  • c语言swap函数交换数组2024-12-12 09:01:01
  • java shopping2024-12-12 09:01:01
  • java中treenode2024-12-12 09:01:01
  • ssh服务器命令2024-12-12 09:01:01
  • 数据库核心知识点2024-12-12 09:01:01
  • 哈夫曼树的原理2024-12-12 09:01:01