我应该在 sklearn KFold 交叉验证中设置 shuffle=True 或 False 吗?

Jam*_*ten 5 scikit-learn k-fold

我正在研究我的数据集上的一些 cross_validation 分数cross_val_score,特别KFold 是我的代码如下所示:

cross_val_score(estimator=model, X=X, y=y, scoring='r2', cv=KFold(shuffle=True))
Run Code Online (Sandbox Code Playgroud)

shuffle=True我的问题是,将 :放入: 中是否是一种常见行为,KFold如果我这样做,则 r2 分数的回报为:

[0.5934, 0.60432, 0.45689, 0.6875, 0.5678]
Run Code Online (Sandbox Code Playgroud)

如果我把shuffle=False它返回

[0.3987, 0,4576, 0.3234, 0.4567. 0.3233]
Run Code Online (Sandbox Code Playgroud)

我不希望用于迭代训练的相同点在下一次迭代中重新考虑,最终得到交叉验证的乐观分数。我应该如何解释我使用 获得更好的分数shuffle=True

小智 4

交叉验证的一般过程要求对数据集进行随机洗牌。

如果数据本质上是无序的(即非时间序列),那么这shuffle=True是正确的选择。

笔记 :

train_test_split默认情况下sklearnshuffle=True

进一步阅读:

https://scikit-learn.org/stable/modules/cross_validation.html#a-note-on-shuffling

https://www.kaggle.com/general/236904