关于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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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