python - Scikit学习中的随机状态(伪随机数)

标签 python random scikit-learn

我想在scikit learn中实现一个机器学习算法,但是不明白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,那么你可以保证 Run 1 的输出将等于 Run 2 的输出>,即您的拆分将始终相同。 实际的 random_state 数字是 42, 0, 21, ... 并不重要,重要的是每次使用 42 时,第一次创建 split 。 如果您想要可重现的结果(例如在文档中),这很有用,这样每个人在运行示例时都可以一致地看到相同的数字。 在实践中,我会说,您应该在测试时将 random_state 设置为某个固定数字,但如果您确实需要随机(而不是固定)拆分,然后在生产中将其删除。

关于您的第二个问题,伪随机数生成器是一种生成几乎真正随机数的数字生成器。为什么它们不是真正随机的超出了这个问题的范围,在你的情况下可能并不重要,你可以看看 here形成更多细节。

关于python - Scikit学习中的随机状态(伪随机数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28064634/

相关文章:

python - 如何在 numpy 数组和向量行之间执行包含操作?

windows - 命令提示随机数是如何生成的?

java - 显示生成的方程

c++ - 在大表中生成随机数导致崩溃

python - 将 Simple Imputer 与 Pandas 数据框一起使用?

python - 绘制一维数据的 KMeans 聚类和分类

python - 使用 GraphQL 和 Graphene 在多个级别进行过滤

python - numpy.exp() 到底是做什么的?

loops - Python 循环 : idiomatically comparing successive items in a list

python - GridSearchCV 在任何 n_jobs 的窗口上卡住