python - 了解 kfold scikit learn 上的 cross_val_score

标签 python scikit-learn

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),那么算法的工作原理如下:

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

所以每个折叠都用于训练和测试。

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

通常,选择正确的折叠数既是一门艺术,也是一门科学。关于如何选择折叠次数的一些启发式方法,我建议 this answer .最重要的是,您选择的折叠次数可能会略微影响准确性。对于大数据集,折叠次数多比较安全;对于较小的数据集,您应该使用新的随机拆分多次运行练习。

关于python - 了解 kfold scikit learn 上的 cross_val_score,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46406391/

相关文章:

python - 使用SGDClassifier的partial_fit方法进行增量/在线学习

python - 我如何在 Python 中多次训练来自 sklearn 的 SVM 分类器?

python - 在父文件夹中导入 python 包时出错

python - Django:将新外键添加到现有模型,默认值为同一模型中的另一个外键

python - 如何在 cross_validate 之后导出/保存拟合模型并稍后在 pandas 上使用它

python - GridSearchCV 给出 ValueError : continuous is not supported for DecisionTreeRegressor

Python:导出为 CSV 时删除多余的引号

python - 如何使用 numpy/matplotlib 绘制概率分布?

python - 基于 bin 创建列

python - 如何一步一步从预测概率中获取预测类别标签?