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

标签 python scikit-learn random-forest decision-tree depth

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

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

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

最佳答案

RandomForestClassifier 的每个实例都有一个 estimators_ 属性,它是 DecisionTreeClassifier 的列表实例。文档显示 DecisionTreeClassifier 的实例具有 tree_ 属性,该属性是(未记录的,我相信)Tree 类的实例。解释器中的一些探索表明,每个 Tree 实例都有一个 max_depth 参数,似乎正是您要寻找的 - 再次,它是无证。

无论如何,如果 forest 是您的 RandomForestClassifier 实例,那么:

>>> [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)]

关于python - 如何在 Python 的 scikit-learn 中访问树深度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34214087/

相关文章:

python - 在 pycharm 中使用标准输入

python - 使用 sklearn 内部函数

python - 使用样本语料库训练机器学习算法,然后从任意文本中提取相似部分

python - 如何解决 Python sklearn 随机森林中的过拟合问题?

python - 山狮更新和善变库python

Python -- 在同一个包内的模块中导入包

python: float 的最大公约数(gcd),最好在numpy中

python - 将单词添加到 scikit-learn 的 CountVectorizer 的停止列表

r - 为什么 R 中不同的随机森林实现会产生不同的结果?

r - 插入符号包相当于 randomForest.getTree