k 折交叉验证的阅读文档 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. ])
最佳答案
我认为“每一折都包含一个新的训练和测试集”这一说法是不正确的。
默认情况下,cross_val_score
使用KFold
交叉验证。这是通过将数据集分成 K 等份来实现的。假设我们有 3 个折叠(fold1、fold2、fold3),那么算法的工作原理如下:
- 在 svm 中使用 fold1 和 fold2 作为训练集并在 fold3 上测试性能。
- 使用 fold1 和 fold3 作为我们在 svm 中的训练集,并在 fold2 上测试性能。
- 使用 fold2 和 fold3 作为我们在 svm 中的训练集,并在 fold1 上测试性能。
所以每个折叠都用于训练和测试。
现在进入问题的第二部分。如果增加折叠中的数据行数,则确实会减少每次运行的训练样本数(上面,将运行 1、2 和 3),但训练样本总数不变。
通常,选择正确的折叠数既是一门艺术,也是一门科学。关于如何选择折叠次数的一些启发式方法,我建议 this answer .最重要的是,您选择的折叠次数可能会略微影响准确性。对于大数据集,折叠次数多比较安全;对于较小的数据集,您应该使用新的随机拆分多次运行练习。
关于python - 了解 kfold scikit learn 上的 cross_val_score,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46406391/