我想了解更多关于我用sklearn构建的随机森林回归器的信息。例如,如果我不进行正则化处理,这些树平均有多少深度?
原因是我需要对模型进行正则化,并希望对模型当前的状态有所了解。另外,如果我设置例如max_leaf_nodes
是否仍然需要限制max_depth
还是这种“问题”本身可以解决,因为设置max_leaf_nodes
时树不能增长得太深。这有意义还是我在错误的方向上思考?我找不到这个方向的任何东西。
最佳答案
如果您想知道构成随机森林模型的树木的平均最大深度,则必须单独访问每棵树并查询其最大深度,然后根据获得的结果计算统计量。
首先让我们做一个随机森林分类器模型的可复制示例(取自Scikit-learn documentation)
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=1000, n_features=4,
n_informative=2, n_redundant=0,
random_state=0, shuffle=False)
clf = RandomForestClassifier(n_estimators=100,
random_state=0)
clf.fit(X, y)
现在我们可以遍历其包含每个决策树的
estimators_
属性。对于每个决策树,我们查询属性tree_.max_depth
,存储响应并在完成迭代后取平均值:max_depth = list()
for tree in clf.estimators_:
max_depth.append(tree.tree_.max_depth)
print("avg max depth %0.1f" % (sum(max_depth) / len(max_depth)))
这将使您了解组成您的随机森林模型的每棵树的平均最大深度(正如您所问的,它对于回归模型也完全一样)。
无论如何,作为建议,如果您想对模型进行正则化,则可以在cross-validation和grid/random search范式下更好地测试参数假设。在这种情况下,您实际上不需要问自己超参数如何相互影响,您只需测试不同的组合,就可以根据交叉验证得分获得最佳组合。
关于python - 如何获得有关sklearn的随机森林中树木的信息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55276902/