了解kfold scitkit中的cross_val_score

时间:2017-09-25 13:24:53

标签: python scikit-learn

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

这是否正确: 在生成cross_val_score每个折叠包含一个新的训练和测试集时,这些训练和测试集由下面的代码clf用于评估每个折叠性能?

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

来自文档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.        ])

1 个答案:

答案 0 :(得分:5)

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

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

  1. 使用fold1和fold2作为svm中的训练集并在fold3上测试性能。
  2. 使用fold1和fold3作为我们在svm中的训练集并在fold2上测试性能。
  3. 使用fold2和fold3作为我们在svm中的训练集并在fold1上​​测试性能。
  4. 因此,每个折叠用于 训练和测试。

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

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