sklearn中RepeatedStratifiedKFold和StratifiedKFold的区别

我试图阅读 RepeatedStratifiedKFoldStratifiedKFold 的文档,但除了 RepeatedStratifiedKFold 重复 StratifiedKFold n不同每次重复随机化。

我的问题是:这两种方法是否返回相同的结果?在执行 GridSearchCV 时,我应该使用哪一个来拆分不平衡数据集,选择该方法的理由是什么?

stack overflow Differences between RepeatedStratifiedKFold and StratifiedKFold in sklearn
原文答案

答案:

作者头像

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

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

因此——回答你的问题——,这两种方法不会提供相同的结果。使用 RepeatedStratifiedKFold 意味着每次运行该过程都会将数据集分成不同的分层 k 折叠,因此,性能结果会有所不同。

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

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