【问题标题】:confused about random_state in decision tree of scikit learn对 scikit learn 决策树中的 random_state 感到困惑
【发布时间】:2017-01-02 15:17:03
【问题描述】:

random_state 参数感到困惑,不知道为什么决策树训练需要一些随机性。我的想法,(1)它与随机森林有关吗? (2)它与拆分训练测试数据集有关吗?如果是这样,为什么不直接使用训练测试拆分方法(http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.train_test_split.html)?

http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html

>>> from sklearn.datasets import load_iris
>>> from sklearn.cross_validation import cross_val_score
>>> from sklearn.tree import DecisionTreeClassifier
>>> clf = DecisionTreeClassifier(random_state=0)
>>> iris = load_iris()
>>> cross_val_score(clf, iris.data, iris.target, cv=10)
...                             
...
array([ 1.     ,  0.93...,  0.86...,  0.93...,  0.93...,
        0.93...,  0.93...,  1.     ,  0.93...,  1.      ])

问候, 林

【问题讨论】:

  • 这个问题属于stats.stackexchange.com
  • 谢谢@Merlin,为什么? :)
  • SO 是用于编程的,请看Close。离题的原因..

标签: python python-2.7 machine-learning scikit-learn decision-tree


【解决方案1】:

这在the documentation中有解释

在最优性的几个方面,甚至对于简单的概念,学习最优决策树的问题都是 NP 完全的。因此,实际的决策树学习算法基于启发式算法,例如贪心算法,其中在每个节点处做出局部最优决策。此类算法不能保证返回全局最优决策树。这可以通过在集成学习器中训练多棵树来缓解,其中特征和样本是随机抽样替换的。

因此,基本上,次优贪心算法使用随机选择特征和样本(随机森林中使用的类似技术)重复多次。 random_state 参数允许控制这些随机选择。

interface documentation 特别声明:

如果是int,则random_state是随机数生成器使用的种子;如果是 RandomState 实例,则 random_state 是随机数生成器;如果为 None,则随机数生成器是 np.random 使用的 RandomState 实例。

所以,在任何情况下都会使用随机算法。传递任何值(无论是特定的 int,例如 0 还是 RandomState 实例)都不会改变这一点。传入 int 值(0 或其他值)的唯一理由是使结果在调用之间保持一致:如果您使用 random_state=0 (或任何其他值)调用它,那么每次都会得到相同的结果结果。

【讨论】:

  • 感谢 Ami 的澄清,那么问题来了,我应该选择 random_state 的哪个值。我经常看到有人选择值0,是不是他们不想要近似的贪心算法,但他们想要NP完全完美算法?
  • @LinMa 不客气。您选择的具体值并不重要 - 它只是使结果一致(=确定性),并且在任何情况下都不会导致使用 NPC 算法。我更新了答案以表明这一点。
  • @LinMa 它的工作原理与您预期的差不多(在每个节点上,它会找到“最佳”分割路由到该节点的样本的功能),但是 here is a link
  • @LinMa 前 13 张幻灯片是相关的。他们概述了贪心算法,然后填写细节,而不是真正提供替代方案(信息论考虑解释了每个点的最佳决策)。一切顺利。
  • @LinMa :-) 谢谢你!
【解决方案2】:

许多机器学习模型允许模型训练具有一定的随机性。为 random_state 指定一个数字可确保您在每次运行中获得相同的结果。这被认为是一种很好的做法。您使用任何数字,模型质量不会真正取决于您选择的值。

【讨论】:

    【解决方案3】:

    决策树使用启发式过程。决策树不保证全局相同的解决方案。每次构建模型时,树结构都会有所不同。将特定种子传递给 random_state 可确保每次构建模型时生成相同的结果。

    【讨论】:

      猜你喜欢
      • 2019-01-18
      • 2017-02-23
      • 2020-04-05
      • 1970-01-01
      • 2017-03-26
      • 2016-12-31
      • 2015-03-05
      • 2017-01-21
      相关资源
      最近更新 更多