了解kfold scitkit中的cross_val_score

blu*_*sky 1 python scikit-learn

阅读doc for k fold cross validation http://scikit-learn.org/stable/modules/cross_validation.html我正在尝试理解每个折叠的训练过程.

这是正确的:在生成cross_val_score每个折叠包含一个新的训练和测试集时,clf下面的代码中传入的分类器使用这些训练和测试集来评估每个折叠性能吗?

这意味着增加折叠的大小会影响准确性,这取决于训练集的大小,因为增加折叠次数会减少每次折叠可用的训练数据?

从doc cross_val_score生成使用:

from sklearn.model_selection import cross_val_score
clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, iris.data, iris.target, cv=5)
scores                                              
array([ 0.96...,  1.  ...,  0.96...,  0.96...,  1.        ])
Run Code Online (Sandbox Code Playgroud)

bin*_*jip 6

我不认为声明"每个折叠包含一个新的训练和测试集"是正确的.

默认情况下,cross_val_score使用KFold交叉验证.这通过将数据集拆分为K个等折叠来实现.假设我们有3个折叠(fold1,fold2,fold3),那么算法的工作原理如下:

  1. 使用fold1和fold2作为svm中的训练集并在fold3上测试性能.
  2. 使用fold1和fold3作为我们在svm中的训练集并在fold2上测试性能.
  3. 使用fold2和fold3作为我们在svm中的训练集并在fold1上​​测试性能.

因此,每个折用于两个训练和测试.

现在问题的第二部分.如果增加折叠的大小,则会减少每次运行的训练样本数量(上面,将运行1,2和3),但训练样本的总数不变.

通常,选择正确数量的折叠既是艺术又是科学.关于如何选择折叠次数的一些启发式方法,我建议这个答案.最重要的是,您选择折叠次数会略微影响精度.对于大型数据集,您可以相对安全地进行大量折叠; 对于较小的数据集,您应该使用新的随机分割多次运行练习.