交叉验证(Cross Validation)比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交叉验证(Cross Validation)比较相关的知识,希望对你有一定的参考价值。

参考技术A 在分类问题中,我们通常通过对训练集进行train_test_split,划分成train 和test 两部分,其中train用来训练模型,test用来评估模型,模型通过fit方法从train数据集中学习,然后调用score方法在test集上进行评估,打分;从分数上我们可以知道 模型当前的训练水平如何。

输出:
output: Test set score:0.96
然而,这种方式存:只进行了一次划分,数据结果具有偶然性,如果在某次划分中,训练集里全是容易学习的数据,测试集里全是复杂的数据,这样就会导致最终的结果不尽如意;反之,亦是如此。

针对上面通过train_test_split划分,从而进行模型评估方式存在的弊端,提出Cross Validation 交叉验证。
Cross Validation:简言之,就是进行多次train_test_split划分;每次划分时,在不同的数据集上进行训练、测试评估,从而得出一个评价结果;如果是5折交叉验证,意思就是在原始数据集上,进行5次划分,每次划分进行一次训练、评估,最后得到5次划分后的评估结果,一般在这几次评估结果上取平均得到最后的 评分。k-fold cross-validation ,其中,k一般取5或10。

demo:

输出:

分层交叉验证(Stratified k-fold cross validation):首先它属于交叉验证类型,分层的意思是说在每一折中都保持着原始数据中各个类别的比例关系,比如说:原始数据有3类,比例为1:2:1,采用3折分层交叉验证,那么划分的3折中,每一折中的数据类别保持着1:2:1的比例,这样的验证结果更加可信。
通常情况下,可以设置cv参数来控制几折,但是我们希望对其划分等加以控制,所以出现了KFold,KFold控制划分折,可以控制划分折的数目,是否打乱顺序等,可以赋值给cv,用来控制划分。

demo:

输出:

留一法Leave-one-out Cross-validation:是一种特殊的交叉验证方式。顾名思义,如果样本容量为n,则k=n,进行n折交叉验证,每次留下一个样本进行验证。主要针对小样本数据。

demo:

输出:

控制更加灵活:可以控制划分迭代次数、每次划分时测试集和训练集的比例(也就是说:可以存在既不在训练集也不再测试集的情况);

demo:

输出:

机器学习:常见交叉验证(cross-validation)

交叉验证

交叉验证(cross-validation)
交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。 是评估泛化性能的统计学方法,比单次划分训练集和测试集的方法更稳定,全面。数据集被多次划分,并且需要训练多个模型。

k折交叉验证(k-fold cross-validation)

也称S折交叉验证(S-Folder Cross Validation)
首先将数据划分成(大致)相等的5部分,每一部分叫做**折(fold)**使用一折作为测试集,其他折作为训练集。
scikit-learn中默认是五折交叉验证,当然也可以用cv参数修改。

from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
svm = SVC()
svm_scores = cross_val_score(svm, X, y)  # 返回一个含五个数的列表
print('svm的5折交叉验证平均值:', svm_scores.mean())

简单交叉验证

所谓的简单,是和其他交叉验证方法相对而言的
首先,我们随机的将样本数据分为两部分(比如: 70%的训练集,30%的测试集),然后用训练集来训练模型,在测试集上验证模型及参数。
接着,我们再把样本打乱,重新选择训练集和测试集,继续训练数据和检验模型。最后我们选择损失函数评估最优的模型和参数。

留一交叉验证(Leave-one-out Cross Validation)

该方法是k折交叉验证的特殊情况,主要用于样本量非常少的情况,样本数N <= 50.
我们令K 等于样本数N,每次选择1个样本来验证预测模型的好坏,剩余N-1个样本用于训练。

以上是关于交叉验证(Cross Validation)比较的主要内容,如果未能解决你的问题,请参考以下文章

交叉验证——Cross-validation

交叉验证(Cross Validation)原理小结

交叉验证(Cross Validation)原理小结

Cross-Validation交叉验证是什么?详解及实施

常见交叉验证(cross-validation)

交叉验证(Cross Validation)方法思想简介