在sklearn中,RepeatedStratifiedKFold和StratifiedKFold的区别

10

我试图阅读RepeatedStratifiedKFoldStratifiedKFold的文档,但除了RepeatedStratifiedKFold在每次重复中使用不同的随机化外,我无法区分这两种方法的区别。

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

1个回答

11

StratifiedKFoldRepeatedStratifiedKFold 在处理严重类别不平衡的分类问题时都非常有效。它们都按类别标签进行分层抽样;也就是说,它们将数据集分割成保留每个子集/折中原始数据集中大致相同的类别分布(即每个类别的样本百分比相同)。然而,单次运行 StratifiedKFold 可能会导致模型性能的噪声估计,因为数据的不同划分可能会导致非常不同的结果。这就是 RepeatedStratifiedKFold 发挥作用的地方。

RepeatedStratifiedKFold 通过多次重复交叉验证过程(根据 n_repeats 值),并报告所有运行中所有折叠的 平均值 结果,来改进机器学习模型的估计性能。预期这个 平均值 结果将是模型性能的更准确的估计(参见本文)。

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

RepeatedStratifiedKFold 的好处在于提高了估计模型的性能,但需要拟合和评估更多的模型。例如,如果使用 10 折交叉验证的 5 次重复(即 n_repeats=5)来估算模型的性能,则需要拟合(训练)和评估 50 种不同的模型-这可能会根据数据集的大小、机器学习算法类型、设备规格等而变得计算密集。但是,RepeatedStratifiedKFold 过程可以在不同的核心或不同的机器上执行,这可以大大加快处理速度。例如,设置 n_jobs=-1 将使用系统上所有可用的内核(请参阅这里)。

在评估时,确保使用适当的指标,如这个答案中所述。


谢谢Chris。但是,如果我们在StratifiedKFold中设置参数shuffle=True,那么根据您的回复,这可能会减少模型噪声估计的机会。此外,GridSearchCV(estimator(200), cv=StratifiedKFold)可能与GridSearchCV(estimator(100), cv=RepeatedStratifiedKFold)一样全面,因为它有两倍的迭代/时期? - Nemo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接