sklearn中RepeatedStratifiedKFold和StratifiedKFold的区别

Nem*_*emo 10 python classification machine-learning scikit-learn cross-validation

RepeatedStratifiedKFold我尝试阅读和的文档StratifiedKFold,但无法区分这两种方法之间的区别,除了在每次重复中以不同的随机化RepeatedStratifiedKFold重复StratifiedKFold n

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

Chr*_*ris 11

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

\n

RepeatedStratifiedKFold通过简单地多次重复交叉验证n_repeats过程(根据值)并报告所有运行的所有折叠的平均结果,可以提高机器学习模型的估计性能。该平均结果预计将是对模型性能的更准确估计(请参阅本文)。

\n

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

\n

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

\n

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

\n