我尝试阅读文档RepeatedStratifiedKFold https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RepeatedStratifiedKFold.html and StratifiedKFold https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html,但无法区分这两种方法之间的区别,除了RepeatedStratifiedKFold
重复StratifiedKFold
n times每次重复都有不同的随机化。
我的问题是:这两种方法返回的结果相同吗?我应该使用哪一个来拆分不平衡做时的数据集GridSearchCV
选择这种方法的理由是什么?
Both StratifiedKFold https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html and RepeatedStratifiedKFold https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RepeatedStratifiedKFold.html当用于具有严重类别不平衡的分类问题时可以非常有效。他们两个stratify按类标签采样;也就是说,他们以这样的方式分割数据集,即在每个子集/折叠中保留与原始数据集大致相同的类分布(即每个类的样本百分比相同)。然而,单次运行StratifiedKFold
可能会导致模型性能的噪声估计,因为数据的不同分割可能会导致非常不同的结果。那就是哪里RepeatedStratifiedKFold
发挥作用。
RepeatedStratifiedKFold
允许通过简单地重复来提高机器学习模型的估计性能交叉验证 https://scikit-learn.org/stable/modules/cross_validation.html多次执行该程序(根据n_repeats
值),并报告mean所有运行的所有折叠的结果。这mean预计结果将是对模型性能的更准确估计(请参阅本文 https://machinelearningmastery.com/repeated-k-fold-cross-validation-with-python/).
因此——回答你的问题——no,这两种方法将not提供相同的结果。使用RepeatedStratifiedKFold
意味着每次运行该过程都会导致数据集不同的分层k-折叠,因此,性能结果会有所不同。
RepeatedStratifiedKFold
其优点是可以提高估计模型的性能,但代价是拟合和评估更多模型。例如,如果重复 5 次(即n_repeats=5
)的 10 倍交叉验证用于估计模型的性能,这意味着需要拟合(训练)和评估 50 个不同的模型,这可能会导致计算成本高昂,具体取决于数据集的大小、机器学习算法的类型、设备规格等。但是,RepeatedStratifiedKFold
进程可以在不同的内核或不同的机器上执行,这可以显着加快进程。例如,设置n_jobs=-1
将使用系统上所有可用的内核(看看here https://machinelearningmastery.com/multi-core-machine-learning-in-python/).
在评估时,请确保使用适当的指标,如中所述这个答案 https://stackoverflow.com/a/70850584/17865804.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)