如何在 Python 的 scikit-learn 中访问树深度?



我正在使用scikit learn创建一个随机森林。然而,我想找到每棵树的个体深度。这似乎是一个简单的属性,但根据文档(http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html)没有办法访问它。

如果这不可能,有没有一种方法可以从决策树模型中访问树的深度?

如有任何帮助,我们将不胜感激。非常感谢。

RandomForestClassifier的每个实例都有一个estimators_属性,该属性是DecisionTreeClassifier实例的列表。文档显示DecisionTreeClassifier的实例有一个tree_属性,它是(我相信没有文档)Tree类的实例。解释器中的一些探索表明,每个Tree实例都有一个max_depth参数,看起来就是您要查找的内容——同样,它是未记录的。

在任何情况下,如果forestRandomForestClassifier的实例,则:

>>> [estimator.tree_.max_depth for estimator in forest.estimators_]
[9, 10, 9, 11, 9, 9, 11, 7, 13, 10]

应该做到这一点。

每个估计器也有一个get_depth()方法,可以使用更简短的语法来检索相同的值:

>>> [estimator.get_depth() for estimator in forest.estimators_]
[9, 10, 9, 11, 9, 9, 11, 7, 13, 10]

为了避免混淆,应该注意的是,每个估计器(而不是每个估计员的tree_)都有一个名为max depth的属性,它返回参数的设置,而不是实际树的深度。以下示例阐明了estimator.get_depth()estimator.tree_.max_depthestimator.max_depth之间的关系:

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=3, random_state=4, max_depth=6)
iris = load_iris()
clf.fit(iris['data'], iris['target'])
[(est.get_depth(), est.tree_.max_depth, est.max_depth) for est in clf.estimators_]

输出:

[(6, 6, 6), (3, 3, 6), (4, 4, 6)]

将最大深度设置为默认值None将允许第一棵树扩展到深度7,并且输出为:

[(7, 7, None), (3, 3, None), (4, 4, None)]

相关内容

  • 没有找到相关文章

最新更新