【问题标题】:Difference between Shuffle and Random_State in train test split?训练测试拆分中 Shuffle 和 Random_State 之间的区别?
【发布时间】:2022-04-19 20:55:15
【问题描述】:

我在一个小型数据集样本上尝试了这两种方法,它返回了相同的输出。那么问题来了,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]]

【问题讨论】:

  • random_state 将为结果的可重复性设置种子,而 shuffle 设置训练集和测试集是否由混洗数组组成(如果设置为 False,则所有 n数组中的第一个观测值将进入训练数据集,所有其他观测值将进入测试数据集中)。
  • 但实际上,如果我将其设置为 false 或选择固定的 random_state,我看不出有什么不同。实际上shuffle=False时只保留原始数组的顺序,否则会有一个初始随机重新排序,可以通过设置random_state=0来保持。
  • 我添加了一个澄清答案。

标签: python machine-learning scikit-learn


【解决方案1】:

有时实验可能有助于理解函数的工作原理。

如果你有这样的 DataFrame:

   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 的任何其他int,您将得到相同的结果:
# 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 运行代码,输出将始终保持不变。您已经设置了一个种子,这对结果的可重复性很有用!

【讨论】:

    【解决方案2】:
    • random_state 控制伪随机 numpy 生成器。为了代码的可重复性,应指定 random_state。

    • shuffle: 如果为 True 则在拆分前将数据打乱

    更多细节:

    random_state : int,RandomState 实例或无,可选 (default=None) 如果是 int,则 random_state 是随机使用的种子 数字生成器;如果是 RandomState 实例,则 random_state 是随机的 数字生成器;如果没有,随机数生成器是 np.random 使用的 RandomState 实例。

    shuffle : boolean, optional (default=True) 是否随机播放 拆分前的数据。如果 shuffle=False 那么分层必须是 没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      相关资源
      最近更新 更多