在Scikit的决策树中对random_state感到困惑

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

learn.org/stable/modules/generation/sklearn.cross_validation.train_test_split.html)?

http://scikit-

learn.org/stable/modules/generation/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. ])

问候,

回答:

在文档中对此进行了解释

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

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

该接口文件明确规定:

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

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

以上是 在Scikit的决策树中对random_state感到困惑 的全部内容, 来源链接: utcz.com/qa/424571.html

回到顶部