如何在同一折叠上使用多个分类器运行 scikit 的交叉验证

Posted

技术标签:

【中文标题】如何在同一折叠上使用多个分类器运行 scikit 的交叉验证【英文标题】:How to run scikit's cross validation with several classifiers on the same folds 【发布时间】:2015-07-23 15:09:46 【问题描述】:

我目前正在进行一项关于分类器性能比较的研究。为了评估这些性能,我正在计算我拥有的所有数据集上每个分类器的准确性、曲线下面积和平方误差。此外,我需要对一些分类器执行调优参数,以便在准确度方面选择最佳参数,因此需要进行验证测试(我选择了 20% 的数据集)。

有人告诉我,为了使这种比较更有意义,应该对每个分类器的相同集合执行交叉验证。

所以基本上,有没有一种方法可以使用 cross_val_score 方法,以便它始终在所有分类器的相同折叠上运行,或者我应该从头开始重写一些可以完成这项工作的代码?

提前谢谢你。

【问题讨论】:

CV 默认为 StratifiedKFold,用于 shuffle=False 的分类。所以你应该得到可重复的折叠。 【参考方案1】:

cross_val_score 接受一个cv 参数,该参数代表您要使用的交叉验证对象。您可能需要StratifiedKFold,它接受shuffle 参数,该参数指定您是否要在对其运行交叉验证之前对数据进行洗牌。

cv 也可以是 int,在这种情况下,K = cv 将自动创建 StratifiedKFoldKFold 对象。

从文档中可以看出,shuffle 默认为 False,因此默认情况下,它已经在所有分类器的相同折叠上执行。

您可以通过在同一个分类器上运行两次来测试它以确保(您应该得到完全相同的结果)。

你可以像这样自己指定:

your_cv = StratifiedKFold(your_y, n_folds=10, shuffle=True) # or shuffle=False
cross_val_score(your_estimator, your_X, y=your_y, cv=your_cv)

【讨论】:

以上是关于如何在同一折叠上使用多个分类器运行 scikit 的交叉验证的主要内容,如果未能解决你的问题,请参考以下文章

使用多个分类器时 - 如何衡量集成的性能? [SciKit 学习]

如何从 scikits.learn 分类器中提取信息然后在 C 代码中使用

是否有用于运行多个分类器的 Python 管道函数?

如何在 keras 分类器中使用交叉验证

在 scikit-learn 中跨多个模型进行交叉验证时如何保持相同的折叠?

在 Scikit-Learn 分类器上使用交叉验证