python - 如何获取 sklearn 随机森林中树木的信息?

标签 python python-3.x scikit-learn

我想了解更多关于我用 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/

相关文章:

python-3.x - Python 中函数连续性的问题

mysql - Docker-Compose 无法连接到 MySQL

python - 何时使用 SQLAlchemy .get() 与 .filter(Foo.ID == primary_key_id).first()

python - 删除 NumPy 数组中的连续重复项

python - 使用 while 循环检查单独的变量

python-3.x - 如何在管道中使用适当的 FunctionTransformer 制作 GridSearchCV?

python - 如何创建包含所有相关文本的单个列?

python - Sklearn 线性回归 X 和 Y 输入格式

python - 在偏移处读入字节数组?

python - 复制的变量改变了原来的?