火车测试拆分中的随机播放和Random_State之间的区别?

时间:2019-11-20 13:44:32

标签: python scikit-learn

我在一个小的数据集样本上尝试了两者,并返回了相同的输出。所以问题是,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]]

2 个答案:

答案 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输出将始终保持不变。您已经设置了种子,这对于结果的可重复性很有用!