交叉验证

cross_val_score 实例


交叉检验(cross validation)是一种常用的模型选择方法。

如果给你的样本数据充足,模型选择的一种简单方法是将随机数据切分为训练集(training set)、验证集(validation set)、测试集(test set)。训练集用来训练模型、验证集用于模型选择、测试集对最终的模型进行评估。

但实际应用中数据是不充足的。此时,可以采用交叉验证法。思想是:重复的使用数据,把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复进行训练,测试以及模型选择。


根据切分方法的不同,交叉验证分为三种:

简单交叉验证

首先随机地将数据分为两部分,一部分作为训练集,另一部分作为测试集(例如,70% 的数据作为训练集,30% 的数据作为测试集);然后用训练集在各种条件下训练模型,从而得到不同的模型;在测试集上评价各个模型的测试误差,选出测试误差最小的模型。


K 折交叉验证

首先随机地将数据切分为 K 个互不相交、大小相同的子集

然后利用 K1 个子集的数据训练模型,余下的子集测试模型,这一过程会得得到 K 个模型

最后选出 K 次中误差最小的模型,或平均 K 次结果,或其他结合方式。


留一交叉验证

K 折交叉验证的特殊情形,K=N,称为留一交叉验证(leaveoneout cross validation)。这里 N 是数据集的容量。对于 N 个样本,每次选择 N1 个样本作训练集,1 个样本作测试集。


三种交叉验证的选择:只是对数据做一个初步的模型建立,不做深入分析,简单交叉验证就可以。否则用 K 折交叉验证。当数据集很少的时候(N<50),使用留一交叉验证。


自助法

还有一种比较特殊的交叉验证方法,也是用于数据集很少的时候(N<20)。叫自助法。即有放回的抽样法,采集跟训练集个数 m 相同的样本。这 m 个样本做训练集,没在训练集出现的样本做测试集。这样的测试结果,也叫“包外估计”。

m 次采样中没被采集到的概率:

p()         =(11m)m

m 取极限:

limm(11m)m=1e0.368

也就是初始训练集约有 63.2% 的样本在采样集中,36.8% 没被采集。


函数:

sklearn.cross_validation.cross_val_score(estimator, X, y=None, scoring=None, cv=None,n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')

返回值:

交叉验证每次运行的评分数组。

参数:

estimator:数据对象。比如:分类器名称。estimator=svm.SVC(kernal=linear,C=1)

X:数据。

y:预测数据。

scoring:调用方法。

  • accuracy:准确率。
  • f1F1 值,只用于二分类。
  • precision:精度,只用于二分类。
  • recall:召回率,只用于二分类。
  • balanced accuracy:平衡精度。

cv:如果是 int 值,表示几折交叉验证;也可以是一个迭代策略生成器,指定不同的 cv 方法。

n_jobsCPU 个数(1 表示全部)。



posted @   做梦当财神  阅读(2909)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示