我是机器学习的新手,我正在经历一些例子 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?
答案 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
只是为随机生成器设置一个种子,这样你的训练测试分裂总是确定性的。如果您没有设置种子,则每次都会有所不同。
random_state
:int
,RandomState
个实例或None
,可选 (缺省值=None
) 强>
如果int
,random_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),这是否不符合机器学习的观点,因为它应该使用随机性来帮助发现可能的最佳结果?
对于调试,我了解固定的随机数。.但是在进行“真实”训练时,我们应该使用真正的随机种子吗?