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

She*_*ly 25 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)
Run Code Online (Sandbox Code Playgroud)

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

X_train, X_test, y_train, y_test = \
    train_test_split(X, y, test_size=0.30, random_state=1)
Run Code Online (Sandbox Code Playgroud)

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

Viv*_*mar 30

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

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

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

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

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

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


Ris*_*sal 11

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

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


San*_*San 9

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

当 random_state 设置为None 时, 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)
Run Code Online (Sandbox Code Playgroud)

输出

[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]


小智 5

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

如果仍然有疑问请观看


小智 5

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

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


小智 5

random_state 默认情况下为 None,这意味着每次运行程序时,您都会得到不同的输出,因为训练和测试之间的划分有所不同。

random_state = 任何 int 值意味着每次运行程序时,您都会得到相同的输出,因为训练和测试之间的分割不会发生变化。