【问题标题】:What is "random-state" in sklearn.model_selection.train_test_split example? [duplicate]sklearn.model_selection.train_test_split 示例中的“随机状态”是什么? [复制]
【发布时间】:2018-08-15 07:27:35
【问题描述】:

有人能解释一下下面例子中random_state 的含义吗?

import numpy as np
from sklearn.model_selection import train_test_split
X, y = np.arange(10).reshape((5, 2)), range(5)


X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.33, random_state=42) 

为什么硬编码为 42?

【问题讨论】:

标签: python numpy machine-learning random scikit-learn


【解决方案1】:

这不是很明显吗? 42 是Answer to the Ultimate Question of Life, the Universe, and Everything

严肃地说,random_state 只是为随机生成器设置了一个种子,这样您的训练测试拆分始终是确定性的。不种下种子,每次都不一样。

Relevant documentation:

random_state : intRandomState 实例或None,可选 (默认=None
如果intrandom_state是随机使用的种子 数字生成器;如果RandomState 实例,random_state 是随机的 数字生成器;如果None,随机数生成器是 RandomState 实例被np.random 使用。

【讨论】:

  • 第一句话就够了。
  • @cs95 我是否必须为代码中的后续方法生成一个新的random_state?例如,如果我将 train_test_split 的随机状态设置为 42,我是否也将随机状态设置为 42,以便我将在拆分数据上使用的分类器?如果我想比较两个不同的分类器,我是否对两个分类器使用相同的随机状态?
  • @Turtle 我认为您希望设置一个全局种子,以便您的管道是确定性的。这只会使拆分确定性,没有别的。考虑使用类似 np.random.seed 的东西或创建一个随机状态对象,然后跨函数重用。
  • 但是如果你在train,test split中使用它,你在运行每个算法时还需要使用它吗?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    随机状态确保您生成的拆分是可重​​现的。 Scikit-learn 使用随机排列来生成拆分。您提供的随机状态用作随机数生成器的种子。这样可以确保随机数以相同的顺序生成。

    【讨论】:

      【解决方案4】:

      如果没有在代码中为每次运行定义 Random_state,训练数据将发生变化,并且每次运行的准确性可能会发生变化。 当定义了 Random_state = "constant integer" 时,每次运行的训练数据都是常量,以便调试。

      【讨论】:

        【解决方案5】:

        随机状态只是在任何操作中随机生成的集合的批号。每当我们想要再次使用同一组时,我们都可以指定此批号。

        【讨论】:

          猜你喜欢
          • 2019-11-07
          • 1970-01-01
          • 2017-10-17
          • 1970-01-01
          • 2011-09-03
          • 2011-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多