梯度增强回归树与随机森林的特征重要性计算

时间:2015-01-09 14:23:31

标签: scikit-learn regression random-forest

在具有一些特征的数据上,我训练随机森林用于回归目的,并且还使用梯度提升回归树。对于这两个我计算特征重要性,我发现它们是相当不同的,尽管它们获得了相似的分数。

对于随机森林回归:

MAE: 59.11
RMSE: 89.11

Importance:

Feature 1: 64.87
Feature 2: 0.10
Feature 3: 29.03
Feature 4: 0.09
Feature 5: 5.89

对于渐变增强回归树:

MAE: 58.70
RMSE: 90.59

Feature 1: 65.18
Feature 2: 5.67
Feature 3: 13.61
Feature 4: 4.26
Feature 5: 11.27

这是为什么?我想也许是因为使用渐变增强回归树,树木比随机森林更浅。但我不确定。

1 个答案:

答案 0 :(得分:2)

虽然它们都是基于树的,但它们仍然是不同的算法,因此每个算法都会以不同的方式计算要素的重要性,这里是相关的代码:

<强> scikit学习/ sklearn /合奏/ gradient_boosting.py

def feature_importances_(self):   
    total_sum = np.zeros((self.n_features, ), dtype=np.float64)
    for stage in self.estimators_:
        stage_sum = sum(tree.feature_importances_
                        for tree in stage) / len(stage)
        total_sum += stage_sum

    importances = total_sum / len(self.estimators_)
    return importances

<强> scikit学习/ sklearn /合奏/ forest.py

def feature_importances_(self):
    all_importances = Parallel(n_jobs=self.n_jobs, backend="threading")(
        delayed(getattr)(tree, 'feature_importances_')
        for tree in self.estimators_)
    return sum(all_importances) / self.n_estimators

所以,不同的树木和不同的树木组合方式。