首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python的scikit-learn中访问树深度?

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

Stack Overflow用户
提问于 2015-12-11 08:11:41
回答 1查看 14.4K关注 0票数 32

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

如果这是不可能的,有没有办法从决策树模型访问树深度?

任何帮助都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-11 08:28:50

每个RandomForestClassifier实例都有一个estimators_属性,该属性是DecisionTreeClassifier实例的列表。文档显示DecisionTreeClassifier的一个实例有一个tree_属性,它是(我相信没有文档记录的) Tree类的一个实例。对解释器的一些研究表明,每个Tree实例都有一个max_depth参数,这似乎就是您要查找的参数--同样,它没有文档记录。

在任何情况下,如果forest是您的RandomForestClassifier实例,则:

代码语言:javascript
复制
>>> [estimator.tree_.max_depth for estimator in forest.estimators_]
[9, 10, 9, 11, 9, 9, 11, 7, 13, 10]

应该能行得通。

每个估计器还具有一个get_depth()方法,可用于以更简洁的语法检索相同的值:

代码语言:javascript
复制
>>> [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之间的关系:

代码语言:javascript
复制
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_]

输出:

代码语言:javascript
复制
[(6, 6, 6), (3, 3, 6), (4, 4, 6)]

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

代码语言:javascript
复制
[(7, 7, None), (3, 3, None), (4, 4, None)]
票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34214087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档