拆分数据集中的Python随机状态

时间:2017-02-12 18:47:24

标签: python random machine-learning scikit-learn

我是python的新手。任何人都可以告诉我为什么我们在分裂列车和测试集中将随机状态设置为零。

X_train, X_test, y_train, y_test = \
    train_test_split(X, y, test_size=0.30, random_state=0)

我已经看到过这样的情况,其中随机状态设置为1!

X_train, X_test, y_train, y_test = \
    train_test_split(X, y, test_size=0.30, random_state=1)

这种随机状态在交叉验证中的结果是什么?

10 个答案:

答案 0 :(得分:24)

random_state为0或1或任何其他整数无关紧要。重要的是,如果要在多次运行的代码中验证处理,则应将其设置为相同的值。顺便说一句,我已经看到random_state=42在许多官方的scikit和其他地方的例子中使用过。

random_state顾名思义,用于初始化内部随机数生成器,它将决定在您的情况下将数据拆分为训练和测试索引。在documentation中,声明:

  

如果random_state为None或np.random,则返回随机初始化的RandomState对象。

     

如果random_state是一个整数,则它用于为一个新的RandomState对象设定种子。

     

如果random_state是RandomState对象,则传递它。

这是在多次运行代码时检查和验证数据。将random_state设置为固定值将保证每次运行代码时都生成相同的随机数序列。除非过程中存在其他一些随机性,否则产生的结果将一如既往。这有助于验证输出。

答案 1 :(得分:3)

random_state拆分随机选择的数据,但会有所不同。而且不同的是,对于特定的random_state值,数据的顺序将是相同的。您需要了解它不是布尔值。从0开始到任何整数no,如果您以random_state传递,则它将是一个永久性的命令。例如:您将在random_state=0中获得的顺序保持不变。之后,如果您执行random_state=5,然后再次回到random_state=0,您将获得相同的命令。像0一样,所有整数都将相同。 random_state=None每次随机分裂的方式。

如果仍然有疑问,请观看this

答案 2 :(得分:3)

random_state默认情况下为“无”,这意味着每次运行程序时,由于训练和测试之间的差异会导致输出不同。

random_state =任何int值意味着,每次运行程序时,由于train和test之间的分配不会在内部变化,因此您将获得相同的输出。

答案 3 :(得分:2)

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

但是,如果分配了固定值,例如 random_state = 0或1或42 ,那么无论执行代码多少次,结果都将相同。即,train和测试数据集。

答案 4 :(得分:2)

random_state是一个整数值,表示选择训练和测试的随机组合。当您将test_size设置为1/4时,将生成一组排列以及训练和测试的组合,并且每种组合都有一个状态。 假设您有一个数据集---> [1,2,3,4]

Train   |  Test   | State
[1,2,3]    [4]      **0**
[1,3,4]    [2]      **1**
[4,2,3]    [1]      **2**
[2,4,1]    [3]      **3**

我们需要它,因为在对模型相同状态进行参数调整时会一再考虑。 这样就不会对准确性有任何推断。

但是在随机森林的情况下,也有类似的故事,但变量不同。

答案 5 :(得分:1)

当random_state设置为整数时,train_test_split将为每次执行返回相同结果。

当random_state设置为时,train_test_split将为每次执行返回不同结果。

请参见以下示例:

from sklearn.model_selection import train_test_split

X_data = range(10)
y_data = range(10)

for i in range(5):
    X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size = 0.3,random_state = 0) # zero or any other integer
    print(y_test)

print("*"*30)

for i in range(5): 
    X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size = 0.3,random_state = None)
    print(y_test)

输出

[2,8,4]

[2,8,4]

[2,8,4]

[2,8,4]

[2,8,4]


[4,7,6]

[4、3、7]

[8,1,4]

[9,5,8]

[6,4,5]

答案 6 :(得分:1)

对于模型的多次执行,随机状态请确保训练和测试数据集的数据值相同。它固定了train_test_split的数据顺序

答案 7 :(得分:0)

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

但是,如果每次使用相同的值作为random_state(random_state = 1或任何其他值),则每次结果都相同时,即训练和测试数据集中的值相同。

答案 8 :(得分:0)

在每个时期之后,我们使用random_state参数来重现训练数据集的初始改组。

答案 9 :(得分:0)

假设我们的数据集有一个特征和 10 个数据点。 X=[0,1,2,3,4,5,6,7,8,9] 假设 0.3(30% 是测试集)被指定为测试数据百分比,那么我们将有 10C3=120 种不同的数据组合。[请参阅链接中的图片以获得表格说明]:https://i.stack.imgur.com/FZm4a.png

根据指定的随机数,系统将选择随机状态并分配训练和测试数据