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_depth 和 estimator.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)]