sklearn RandomForestRegressor:可训练参数的数量

问题描述 投票:0回答:2

有没有办法从 sklearn RandomForestRegressor 中提取模型训练期间适合的(有效)可训练参数数量?

可训练参数的数量可以用来比较两个模型的复杂度。此外,它还可用于估计 chi^2 分布中的自由度数。

感谢您的帮助!

parameters scikit-learn regression random-forest
2个回答
1
投票

简答

n_params = sum(tree.tree_.node_count for tree in model.estimators_) * 4


RandomForestRegressor
有一个
estimators_
属性,它在拟合后填充了所有决策树的列表。 反过来,每个
DecisionTreeRegressor
依次具有一个
tree_
属性,其中包含二元决策树的表示。 根据本教程,每个二叉树都使用四个向量来完整描述,每个向量的长度等于节点数:

  • children_left
    :节点的左子节点的 id,如果是叶节点
  • ,则为 -1
  • children_right
    :节点的右孩子的 id 或 -1 如果是叶节点
  • feature
    :用于分裂节点的特征,编码为整数
  • threshold
    :分裂节点的阈值

我从计算中排除了

n_node_samples
impurity
,因为它们是信息性的,不是构建树所必需的。

因此,参数总数是集成中所有估计器的节点数的总和乘以四。

工作示例

import numpy as np
import sklearn.ensemble

# Mock regression problem.
N = 10000
X = np.random.rand(N, 4)
y = np.mean(X, axis=1)
model = (
    sklearn.ensemble.RandomForestRegressor(
        n_estimators=100,
        min_samples_leaf=11,
        n_jobs=4,
    )
    .fit(X, y)
)
# Each binary tree is described by left & righ children, feature, and threshold for each node.
n_params = sum(tree.tree_.node_count for tree in model.estimators_) * 4
print(f"Total number of parameters: {n_params:d}")

输出:

Total number of parameters: 353024

注意事项

  • 参数总数在减少
    min_samples_leaf
    时增加,因为树变深了。
  • 完全相同的作品
    RandomForestClassifier
    .

-1
投票

拟合后

RandomForestRegressor
您可以访问
feature_importances_
这表明进行拆分时特征的重要性,以及
n_features_
总共使用了多少个特征用于拟合。

© www.soinside.com 2019 - 2024. All rights reserved.