阅读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. ])
答案 0 :(得分:5)
我不认为声明"每个折叠包含一个新的培训和测试集"是正确的。
默认情况下,cross_val_score
使用KFold
交叉验证。这通过将数据集拆分为K个等折叠来实现。假设我们有3个折叠(fold1,fold2,fold3),那么算法的工作原理如下:
因此,每个折叠用于 训练和测试。
现在问题的第二部分。如果增加折叠的大小,则会减少每次运行的训练样本数量(上面,将运行1,2和3),但训练样本的总数不变。
通常,选择正确数量的折叠既是艺术又是科学。关于如何选择折叠次数的一些启发式方法,我建议this answer。最重要的是,您选择折叠次数会略微影响精度。对于大型数据集,您可以相对安全地进行大量折叠;对于较小的数据集,您应该使用新的随机分割多次运行练习。