首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >xgboost模型的内部节点预测

xgboost模型的内部节点预测
EN

Stack Overflow用户
提问于 2019-03-27 21:52:51
回答 1查看 338关注 0票数 3

是否有可能计算xgboost模型的内部节点预测?R包gbm为每个树的内部节点提供了一个预测。

然而,xgboost输出只显示对模型最终叶子的预测。

xgboost输出:

注意,Quality列对第6行中的叶节点有最终的预测,我也希望每个内部节点都有这个值。

代码语言:javascript
运行
复制
   Tree Node  ID    Feature    Split  Yes   No Missing     Quality  Cover
1:    0    0 0-0 Sex=female  0.50000  0-1  0-2     0-1 246.6042790 222.75
2:    0    1 0-1        Age 13.00000  0-3  0-4     0-4  22.3424225 144.25
3:    0    2 0-2   Pclass=3  0.50000  0-5  0-6     0-5  60.1275253  78.50
4:    0    3 0-3      SibSp  2.50000  0-7  0-8     0-7  23.6302433   9.25
5:    0    4 0-4       Fare 26.26875  0-9 0-10     0-9  21.4425507 135.00
6:    0    5 0-5       Leaf       NA <NA> <NA>    <NA>   0.1747126  42.50

R gbm产出:

在R gbm包输出中,预测列包含叶节点(SplitVar == -1)和内部节点的值。我希望从xgboost模型访问这些值。

代码语言:javascript
运行
复制
   SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight   Prediction
0         1   0.000000000        1         8          15      32.564591    445  0.001132514
1         2   9.500000000        2         3           7       3.844470    282 -0.085827382
2        -1   0.119585850       -1        -1          -1       0.000000     15  0.119585850
3         0   1.000000000        4         5           6       3.047926    207 -0.092846157
4        -1  -0.118731665       -1        -1          -1       0.000000    165 -0.118731665
5        -1   0.008846912       -1        -1          -1       0.000000     42  0.008846912
6        -1  -0.092846157       -1        -1          -1       0.000000    207 -0.092846157

问题:

如何访问或计算xgboost模型的内部节点的预测?我想用他们的贪婪,可怜的人的版本的SHAP分数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-17 14:48:46

这个问题的解决方案是用all_stats=True转储xgboost json对象。这将cover统计数据添加到输出中,该输出可用于通过内部节点分发叶点:

代码语言:javascript
运行
复制
def _calculate_contribution(node: AnyNode) -> float32:
        if isinstance(node, Leaf):
            return node.contrib
        else:
            return (
                node.left.cover * Node._calculate_contribution(node.left)
                + node.right.cover * Node._calculate_contribution(node.right)
            ) / node.cover

内部贡献是儿童缴款的加权平均数。使用此方法,生成的结果与用pred_contribs=Trueapprox_contribs=True调用预测方法时返回的结果完全匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55387052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档