关于scikit-learn决策树中的random_state参数的困惑

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_irisfrom sklearn.cross_validation import cross_val_scorefrom sklearn.tree import DecisionTreeClassifierclf = 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.      ])

回答:

这在文档中有解释

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

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

接口文档明确指出:

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

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

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注