Scikit学习中的随机状态(伪随机数)
问题内容:
我想在scikit learning中实现机器学习算法,但是我不明白此参数的random_state
作用?我为什么要使用它?
我也无法理解什么是伪随机数。
问题答案:
train_test_split
将数组或矩阵拆分为随机训练和测试子集。这意味着每次运行时不指定random_state
,您都会得到不同的结果,这是预期的行为。例如:
运行1:
>>> a, b = np.arange(10).reshape((5, 2)), range(5)
>>> train_test_split(a, b)
[array([[6, 7],
[8, 9],
[4, 5]]),
array([[2, 3],
[0, 1]]), [3, 4, 2], [1, 0]]
运行2
>>> train_test_split(a, b)
[array([[8, 9],
[4, 5],
[0, 1]]),
array([[6, 7],
[2, 3]]), [4, 2, 0], [3, 1]]
它改变。另一方面,如果使用random_state=some_number
,则可以保证 运行1 的输出与 运行2
的输出相等,即,拆分将始终相同。实际的random_state
数字是42,0,21,…无关紧要。重要的是,每次使用42时,第一次拆分时总会得到相同的输出。如果您想要可重复的结果(例如在文档中),这将很有用,这样每个人在运行示例时都可以始终看到相同的数字。实际上,我会说,random_state
在测试材料时,应将设置为某个固定数字,但如果确实需要随机(而不是固定)分割,则应在生产中将其删除。
关于第二个问题,伪随机数生成器是一个生成几乎真正随机数的数字生成器。为什么它们不是真正随机的,超出了此问题的范围,可能对您而言无关紧要,您可以在此处查看更多详细信息。