我试图阅读RepeatedStratifiedKFold
和StratifiedKFold
的文档,但除了RepeatedStratifiedKFold
在每次重复中使用不同的随机化外,我无法区分这两种方法的区别。
我的问题是:这两种方法返回相同的结果吗?在进行GridSearchCV
时,我应该使用哪个方法来拆分一个不平衡的数据集,并选择该方法的理由是什么?
我试图阅读RepeatedStratifiedKFold
和StratifiedKFold
的文档,但除了RepeatedStratifiedKFold
在每次重复中使用不同的随机化外,我无法区分这两种方法的区别。
我的问题是:这两种方法返回相同的结果吗?在进行GridSearchCV
时,我应该使用哪个方法来拆分一个不平衡的数据集,并选择该方法的理由是什么?
StratifiedKFold
和 RepeatedStratifiedKFold
在处理严重类别不平衡的分类问题时都非常有效。它们都按类别标签进行分层抽样;也就是说,它们将数据集分割成保留每个子集/折中原始数据集中大致相同的类别分布(即每个类别的样本百分比相同)。然而,单次运行 StratifiedKFold
可能会导致模型性能的噪声估计,因为数据的不同划分可能会导致非常不同的结果。这就是 RepeatedStratifiedKFold
发挥作用的地方。
RepeatedStratifiedKFold
通过多次重复交叉验证过程(根据 n_repeats
值),并报告所有运行中所有折叠的 平均值 结果,来改进机器学习模型的估计性能。预期这个 平均值 结果将是模型性能的更准确的估计(参见本文)。
因此—回答你的问题—不,这两种方法将不会提供相同的结果。使用 RepeatedStratifiedKFold
意味着每次运行过程都会将数据集划分为不同的分层 k-折,因此性能结果将不同。
RepeatedStratifiedKFold
的好处在于提高了估计模型的性能,但需要拟合和评估更多的模型。例如,如果使用 10 折交叉验证的 5 次重复(即 n_repeats=5
)来估算模型的性能,则需要拟合(训练)和评估 50 种不同的模型-这可能会根据数据集的大小、机器学习算法类型、设备规格等而变得计算密集。但是,RepeatedStratifiedKFold
过程可以在不同的核心或不同的机器上执行,这可以大大加快处理速度。例如,设置 n_jobs=-1
将使用系统上所有可用的内核(请参阅这里)。
在评估时,确保使用适当的指标,如这个答案中所述。
StratifiedKFold
中设置参数shuffle=True
,那么根据您的回复,这可能会减少模型噪声估计的机会。此外,GridSearchCV(estimator(200), cv=StratifiedKFold)
可能与GridSearchCV(estimator(100), cv=RepeatedStratifiedKFold)
一样全面,因为它有两倍的迭代/时期? - Nemo