sklearn中的Kfold交叉验证每次都会给出不同的折叠

Posted

技术标签:

【中文标题】sklearn中的Kfold交叉验证每次都会给出不同的折叠【英文标题】:Kfold cross validation in sklearn gives different folds each time 【发布时间】:2019-03-18 04:31:59 【问题描述】:

我想在我的模型上实现 KFold 交叉验证。由于我想与他人分享我的结果,我希望每次都有固定的结果。我使用 xgboost 模型作为我的分类模型。但是,每次我运行我的代码时,我的性能指标每次都会给出不同的结果,我很困惑,因为我将shuffle 参数设置为False。另外,我不确定random_state 参数的作用(我阅读了文档),但无论如何我尝试将其设置为使用 shuffle=False 的固定数字,但这并没有帮助。

kf = KFold(n_splits=5, shuffle = False)

for train_index, test_index in kf.split(X, y):
    X_train, X_test = X.iloc[train_index], X.iloc[test_index]
    y_train, y_test = y.iloc[train_index], y.iloc[test_index]
    xgb = XGBClassifier(max_depth = 4)
    ...fit, predict, and compute performance metrics

【问题讨论】:

在参数random_state 中传递一个数字时,您正在修复内部随机数生成器的种子。以后如果再设置成同一个数,产生的随机数的序列总是一样的。通过这种方式,您可以保证结果的可重复性,就像您想要的那样。 谢谢!我同时使用了 shuffle = False 和随机状态。我应该只使用随机状态。 不错!然后我会将该评论作为答案:) 【参考方案1】:

在参数random_state 中传递一个数字时,您正在修复内部随机数生成器的种子。以后如果再设置成同一个数,产生的随机数序列永远是一样的。通过这种方式,您可以保证结果的可重复性,就像您想要的那样。

【讨论】:

是的,我解决了这个问题,但我最初设置了 shuffle = False 并且它与 random_state 的组合不起作用。 注意random_state 不保证不同 numpy 和 sklearn 版本或不同操作系统之间的可重复性。

以上是关于sklearn中的Kfold交叉验证每次都会给出不同的折叠的主要内容,如果未能解决你的问题,请参考以下文章

k折交叉验证KFold()函数的使用

sklearn KFold() - 将所有折叠保存到 csv 文件

小窥KFold及其变体

如何使用 KFold 交叉验证输出作为 CNN 输入进行图像处理?

KFold 交叉验证不能修复过度拟合

6、可视化交叉验证