有没有办法计算XGBoost树中每个节点的值?

2024-05-28 18:34:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到一种方法来计算XGBoostClassifier中树的每个决策节点的值。我知道这可以通过sklearn树方法来实现,如RandomForest、DecisionTree等。例如-

enter image description here

我发现xgboostget_dump方法只显示叶节点的值。目标是在结果中找到树中每个特征的贡献。如- 结果=偏差+贡献(特征1)+…+贡献(特征n)

这里有一个类似的例子-https://blog.datadive.net/interpreting-random-forests/


Tags: 方法https目标节点特征sklearn贡献dump
1条回答
网友
1楼 · 发布于 2024-05-28 18:34:10

有两种方法可供参考

  1. xgboost的pred_contribs参数:
import lightgbm as lgb
import numpy as np
import pandas as pd
import sklearn

X, y = sklearn.datasets.load_breast_cancer(return_X_y=True)
model = xgb.XGBClassifier(
                          )
model.fit(X, y)

model._Booster.predict(xgb.DMatrix(X[[0],:]),pred_contribs=True) # for first sample, each feature's contribu
# array([[ 0.01069788,  0.5564505 ,  0.        , -0.18979889, -0.12519032,
#          0.0419167 , -0.04723313, -1.0029427 ,  0.00691214,  0.0219936 ,
#         -0.24528527, -0.01379179, -0.08468378, -0.870576  ,  0.00372334,
#          0.11168513, -0.01564308,  0.01463292,  0.03310397,  0.01167833,
#         -0.70834243,  1.7004861 , -0.53104496, -1.2110311 , -0.2576103 ,
#         -0.07476614, -0.40844473, -1.656179  , -0.02658875, -0.03065292,
#          0.9892135 ]], dtype=float32)
  1. eli5的实施 https://github.com/eli5-org/eli5/blob/69637074ad07cdb0d0aa3a650302a721c9272e4b/eli5/xgboost.py#L239

相关问题 更多 >

    热门问题