Skip to main content
 首页 » 编程设计

python之了解 kfold scikit learn 上的 cross_val_score

2025年05月04日14落叶无声

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 .最重要的是,您选择的折叠次数可能会略微影响准确性。对于大数据集,折叠次数多比较安全;对于较小的数据集,您应该使用新的随机拆分多次运行练习。