如何在同一折叠上使用多个分类器运行 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
将自动创建 StratifiedKFold
或 KFold
对象。
从文档中可以看出,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 代码中使用