标签: information-gain

rpart的结果是根,但数据显示信息增益

我有一个事件率低于3%的数据集(即大约有700条记录有1级记录,27000条记录有0级记录).

ID          V1  V2      V3  V5      V6  Target
SDataID3    161 ONE     1   FOUR    0   0
SDataID4    11  TWO     2   THREE   2   1
SDataID5    32  TWO     2   FOUR    2   0
SDataID7    13  ONE     1   THREE   2   0
SDataID8    194 TWO     2   FOUR    0   0
SDataID10   63  THREE   3   FOUR    0   1
SDataID11   89  ONE     1   FOUR    0   0
SDataID13   78  TWO     2   FOUR    0   0
SDataID14   87  TWO     2   THREE   1   0
SDataID15   81  ONE     1   THREE   0   0
SDataID16   63 …
Run Code Online (Sandbox Code Playgroud)

r machine-learning decision-tree rpart information-gain

12
推荐指数
1
解决办法
979
查看次数

XGBoost 中的特征重要性“增益”

我想了解 xgboost 中的特征重要性是如何通过“增益”计算的。从https://towardsdatascience.com/be-careful-when-interpreting-your-features-importance-in-xgboost-6e16132588e7

“增益”是特征为其所在分支带来的准确性的提高。这个想法是在一个特征X上添加一个新的分裂到分支之前有一些错误分类的元素,在这个特征上添加分裂后,有两个新分支,每个分支都更准确(一个分支说如果你的观察是在这个分支上,那么它应该被归类为 1,而另一个分支则正好相反)。

在 scikit-learn 中,特征重要性是通过使用变量分裂后每个节点的基尼杂质/信息增益减少来计算的,即节点的加权杂质平均值 - 左子节点的加权杂质平均值 - 右子节点的加权杂质平均值(参见还有:https : //stats.stackexchange.com/questions/162162/relative-variable-importance-for-boosting

我想知道 xgboost 是否也使用上述引文中所述的使用信息增益或准确性的方法。我试着挖了xgboost的代码,发现了这个方法(已经把不相关的部分剪掉了):

def get_score(self, fmap='', importance_type='gain'):
    trees = self.get_dump(fmap, with_stats=True)

    importance_type += '='
    fmap = {}
    gmap = {}
    for tree in trees:
        for line in tree.split('\n'):
            # look for the opening square bracket
            arr = line.split('[')
            # if no opening bracket (leaf node), ignore this line
            if len(arr) == 1:
                continue

            # look for the closing bracket, extract only info …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn boosting xgboost information-gain

5
推荐指数
1
解决办法
5857
查看次数