我一直有一个疑问,这个shuffle参数到底做了什么,会不会打乱样本的顺序,导致我想生成训练集的预测结果后,再拼接到ID上时顺序就对应不上了。
shuffle = False
import numpy
as np
from sklearn
.model_selection
import KFold
a
= np
.arange
(10)
kfold
= KFold
(n_splits
=3, shuffle
=False, random_state
=2000)
print(list(kfold
.split
(a
)))
print('更改随机种子')
kfold
= KFold
(n_splits
=3, shuffle
=False, random_state
=2018)
print(list(kfold
.split
(a
)))
可以看到更换随机数种子,对split的结果没影响。而且split的结果对应sklearn文档里的说明: Provides train/test indices to split data in train/test sets. Split dataset into k consecutive folds (without shuffling by default).
shuffle = True
import numpy as np
from sklearn.model_selection import KFold
a = np.arange(10)
kfold = KFold(n_splits=3, shuffle=True, random_state=2000)
print(list(kfold.split(a)))
print('更改随机种子')
kfold = KFold(n_splits=3, shuffle=True, random_state=2018)
print(list(kfold.split(a)))
这时可以看到随机种子会影响结果,并且split后的index不再是连续的,而且随机的有间断的数。
那么对于开始的问题, shuffle不会打乱样本顺序,因为它返回的只是index。一般情况下还是应该用shuffle的。