我在一个小的数据集样本上尝试了两者,并返回了相同的输出。所以问题是,scikit的train-test-split方法中的“ shuffle”和“ random_state”参数有什么区别?
MWE的代码:
X, y = np.arange(10).reshape((5, 2)), range(5)
train_test_split(y, shuffle=False)
Out: [[0, 1, 2], [3, 4]]
train_test_split(y, random_state=0)
Out: [[0, 1, 2], [3, 4]]
答案 0 :(得分:1)
random_state
控制伪随机Numpy生成器。为了确保代码的可重复性,应指定random_state。
shuffle
:如果为True,则它会在拆分之前对数据进行洗牌
更多详细信息:
random_state:int,RandomState实例或无,可选 (默认值=无)如果为int,则random_state是随机变量使用的种子 数字发生器如果是RandomState实例,则random_state是random 数字发生器如果为None,则随机数生成器为 np.random使用的RandomState实例。
shuffle:布尔值,可选(默认为True)是否随机播放 拆分之前的数据。如果shuffle = False,则必须分层 没有。
答案 1 :(得分:1)
有时候进行实验可能有助于了解功能的工作原理。
如果您具有以下数据框,请说:
X Y
0 A 2
1 A 3
2 A 2
3 B 0
4 B 0
我们将介绍功能train_test_split
可以完成的不同操作:
train, test = train_test_split(df, test_size=2/5, shuffle=False, random_state=None)
,则总会得到以下结果:# TRAIN
X Y
0 A 2
1 A 3
2 A 2
#TEST
X Y
3 B 0
4 B 0
train, test = train_test_split(df, test_size=2/5, shuffle=False, random_state=1)
或random_state
的任何其他整数,您将得到相同的结果:# TRAIN
X Y
0 A 2
1 A 3
2 A 2
#TEST
X Y
3 B 0
4 B 0
这是由于您您决定不对数据集进行混洗,因此该功能未使用
random_state
。
train, test = train_test_split(df, test_size=2/5, shuffle=True, random_state=None)
,则将获得如下所示的数据集:# TRAIN
X Y
4 B 0
0 A 2
1 A 3
# TEST
X Y
2 A 2
3 B 0
请注意,条目已改组。但也请注意,如果再次运行代码,结果可能会有所不同。
train, test = train_test_split(df, test_size=2/5, shuffle=True, random_state=1)
做random_state
或其他任何int运算,您还将获得两个带有混排条目的数据集:# TRAIN
X Y
4 B 0
0 A 2
3 B 0
# TEST
X Y
2 A 2
1 A 3
仅这次,如果您使用相同的代码再次运行
random_state
,输出将始终保持不变。您已经设置了种子,这对于结果的可重复性很有用!