什么是"随机状态"在sklearn.model_selection.train_test_split示例中?

时间:2018-03-07 09:00:08

标签: python numpy machine-learning scikit-learn

我是机器学习的新手,我正在经历一些例子 sklearn

有人可以解释一下真正的"随机状态"在以下示例中表示

import numpy as np
from sklearn.model_selection import train_test_split
X, y = np.arange(10).reshape((5, 2)), range(5)
X

list(y)


X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.33, random_state=42) 

X_train

y_train

X_test

y_test

为什么硬编码为42?

6 个答案:

答案 0 :(得分:6)

如果未在代码中指定random_state,则每次运行(执行)代码时,都会生成一个新的随机值,并且训练和测试数据集每次都将具有不同的值。

但是,如果分配了一个固定值(例如random_state = 0或1或42或任何其他整数),则无论您执行了多少次代码,结果都将是相同的。即,训练和测试数据集中的值相同。

答案 1 :(得分:3)

不是很明显吗? 42是Answer to the Ultimate Question of Life, the Universe, and Everything

严肃地说,random_state只是为随机生成器设置一个种子,这样你的训练测试分裂总是确定性的。如果您没有设置种子,则每次都会有所不同。

Relevant documentation

  

random_state intRandomState个实例或None,可选   (缺省值= None
  如果intrandom_state是随机使用的种子   数字发生器;如果RandomState实例,random_state是随机的   数字发生器;如果None,随机数生成器就是。{   RandomState使用的np.random实例。

答案 2 :(得分:3)

随机状态可确保您生成的拆分是可重​​现的。 Scikit-learn使用随机排列来生成分裂。您提供的随机状态用作随机数生成器的种子。这可确保以相同的顺序生成随机数。

答案 3 :(得分:3)

在代码中未针对每次运行定义Random_state时,训练数据将发生变化,并且每次运行的准确性可能会发生变化。 当定义了Random_state =“常量整数”时,训练数据将在每次运行时保持不变,从而使其易于调试。

答案 4 :(得分:0)

随机状态只是在任何操作中随机生成的集合的批号。每当我们再次想要相同的集合时,我们都可以指定此批号。

答案 5 :(得分:0)

如果random_state始终是固定的(42),这是否不符合机器学习的观点,因为它应该使用随机性来帮助发现可能的最佳结果?

对于调试,我了解固定的随机数。.但是在进行“真实”训练时,我们应该使用真正的随机种子吗?