sklearn中RepeatedStratifiedKFold和StratifiedKFold的区别

问题描述 投票:0回答:1

我试着阅读

RepeatedStratifiedKFold
StratifiedKFold
的文档,但无法分辨这两种方法之间的区别,除了
RepeatedStratifiedKFold
重复
StratifiedKFold
n times with different randomization in每次重复。

我的问题是:这两种方法返回的结果相同吗?在做 GridSearchCV 时,我应该使用哪一个来拆分

imbalanced
数据集?选择该方法的理由是什么?

python machine-learning scikit-learn classification cross-validation
1个回答
5
投票

StratifiedKFold
RepeatedStratifiedKFold
都可以非常有效地用于具有严重类不平衡的分类问题。他们都 stratify 通过类标签抽样;也就是说,他们以这样一种方式拆分数据集,即在每个子集/折叠中保留与原始数据集中大致相同的类分布(即,每个类的样本百分比相同)。但是,单次运行
StratifiedKFold
可能会导致对模型性能的估计有噪声,因为数据的不同拆分可能会导致非常不同的结果。这就是
RepeatedStratifiedKFold
发挥作用的地方。

RepeatedStratifiedKFold
允许提高机器学习模型的估计性能,只需多次重复 cross-validation 程序(根据
n_repeats
值),并报告所有运行的所有折叠的 mean 结果.这个 mean 结果预计是对模型性能的更准确估计(参见 这篇文章)。

因此——回答你的问题——,这两种方法将提供相同的结果。使用

RepeatedStratifiedKFold
意味着每次运行该过程都会导致将数据集不同地拆分为分层的 k-folds,因此,性能结果会有所不同。

RepeatedStratifiedKFold
的好处是可以以拟合和评估更多模型为代价来提高估计模型的性能。例如,如果使用 10 倍交叉验证的 5 次重复(即
n_repeats=5
)来估计模型的性能,则意味着需要拟合(训练)和评估 50 个不同的模型——这可能是计算上的昂贵,取决于数据集的大小、机器学习算法的类型、设备规格等。但是,
RepeatedStratifiedKFold
过程可以在不同的内核或不同的机器上执行,这可以大大加快过程。例如,设置
n_jobs=-1
将使用系统上所有可用的内核(看看 here)。

在评估方面,请确保使用适当的指标,如此答案中所述。

© www.soinside.com 2019 - 2024. All rights reserved.