Python 关于scikit学习决策树中随机_状态的困惑

Python 关于scikit学习决策树中随机_状态的困惑,python,python-2.7,machine-learning,scikit-learn,decision-tree,Python,Python 2.7,Machine Learning,Scikit Learn,Decision Tree,对random\u state参数感到困惑,不确定为什么决策树训练需要一些随机性。我的想法,(1)它与随机森林有关吗?(2) 是否与分割训练测试数据集相关?如果是这样,为什么不直接使用训练测试分割方法() 问候,, 林这在 学习最优决策树的问题在几个最优性方面甚至对于简单的概念都是NP完全的。因此,实际的决策树学习算法基于启发式算法,例如贪婪算法,在每个节点上做出局部最优决策。这种算法不能保证返回全局最优决策树。这可以通过在集成学习器中训练多棵树来缓解,其中特征和样本通过替换随机抽样 因此,基

random\u state
参数感到困惑,不确定为什么决策树训练需要一些随机性。我的想法,(1)它与随机森林有关吗?(2) 是否与分割训练测试数据集相关?如果是这样,为什么不直接使用训练测试分割方法()

问候,, 林

这在

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

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

特别声明:

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


因此,在任何情况下都将使用随机算法。传递任何值(无论是特定的int,例如0,还是
RandomState
实例)都不会改变这一点。传递int值(0或其他值)的唯一理由是使调用结果一致:如果使用
random\u state=0
(或任何其他值)调用该值,则每次都会得到相同的结果。

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

感谢Ami的澄清,然后问题来了,我应该选择
random\u state
的哪个值。我经常看到人们选择value
0
,这是否意味着他们不想要近似贪婪算法,而是想要NP完全完美算法?@LinMa,不客气。您选择的特定值实际上并不重要-它只是使结果一致(=确定性),并且不会导致在任何情况下使用NPC算法。我更新了答案以表明这一点。@LinMa它的工作原理与您预期的非常接近(在每个节点上,它都会找到“最佳”分割路由到该节点的样本的功能),但是@LinMa前13张幻灯片是相关的。他们概述了贪婪算法,然后填写了细节,并没有真正提供备选方案(信息论的考虑解释了在每一点上什么是最佳决策)。祝你一切顺利。@LinMa:-)谢谢,你也是!这个问题属于感谢@Merlin,为什么?:)编程也是如此,请仔细看。离题的原因。。
>>> 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.      ])