scikit学习分裂数据集中的随机状态



有人能告诉我为什么我们在分割训练和测试集时将随机状态设置为零吗。

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)

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

random_state是0、1还是任何其他整数都无关紧要。重要的是,如果您想在多次运行代码时验证您的处理,则应该将其设置为相同的值。顺便说一句,我已经在scikit的许多官方示例以及其他地方看到了random_state=42的使用。

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

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

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

如果random_state是RandomState对象,那么它将被传递。

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

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

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

参见以下示例:

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]

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

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

random_state分割随机选择的数据,但带有扭曲。扭曲的是,对于random_state的特定值,数据的顺序是相同的。你需要明白,这不是一个bool accpeted值。从0开始到任何整数no,如果你传递为random_state,它将是一个永久的顺序。例如:你在random_state=0中得到的顺序保持不变。之后,如果您执行random_state=5并再次返回random_state=0,您将获得相同的订单。和0一样,所有的整数都是一样的。random_state=None每次随机分裂。

如果仍有疑问,请观看此

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

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

random_state默认为None,这意味着每次运行程序时,都会得到不同的输出,因为内部的训练和测试之间存在差异。

random_state=任意int值意味着每次运行程序时,都会得到相同的输出,因为train和test之间的划分在内部没有变化。

random_state是一个整数值,表示选择列车和测试的随机组合。当您将testrongize设置为1/4时,有一个由train和test的排列和组合生成的集合,每个组合都有一个状态。假设您有一个数据集--->[1,2,4]

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

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

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

我们使用random_state参数来再现每个历元后训练数据集的初始混洗。

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

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

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

相关内容

  • 没有找到相关文章

最新更新