【问题标题】:Use 'predict_contrib' in LightGBM to get SHAP-values在 LightGBM 中使用“predict_contrib”获取 SHAP 值
【发布时间】:2021-02-23 06:04:03
【问题描述】:

在 LightGBM documentation 中声明可以设置 predict_contrib=True 来预测 SHAP 值。

我们如何提取 SHAP 值(除了使用 shap 包)?

我试过了

model = LGBM(objective="binary",is_unbalance=True,predict_contrib=True)
model.fit(X_train,y_train)
pred_shap = opt_model.predict(X_train) #Does not get SHAP-values

这似乎不起作用

【问题讨论】:

    标签: python lightgbm shap


    【解决方案1】:

    由于两个不同的lightgbm API 中的控制参数重复(命名不一致)而引起混淆。

    两个主要 API 中的每一个都使用自己的拼写:

    documentation 偏爱 C 版本(python API 拼写甚至不被视为别名...)

    【讨论】:

      【解决方案2】:

      Shap 使用pred_contrib=True 来评估LGBM 方式:

      from lightgbm.sklearn import LGBMClassifier
      from sklearn.datasets import load_iris
      
      X,y = load_iris(return_X_y=True)
      lgbm = LGBMClassifier()
      lgbm.fit(X,y)
      lgbm_shap = lgbm.predict(X, pred_contrib=True)
      # Shape of returned LGBM shap values: 4 features x 3 classes + 3 expected values over the training dataset
      print(lgbm_shap.shape)
      # 0th row of LGBM shap values for 0th feature
      print(lgbm_shap[0,:4])
      

      输出:

      (150, 15)
      [-0.0176954   0.50644615  5.56584344  3.43032313]
      

      来自shap的形状值:

      import shap
      explainer = shap.TreeExplainer(lgbm)
      shap_values = explainer.shap_values(X)
      # num of predicted classes
      print(len(shap_values))
      # shap values for 0th class for 0th row
      print(shap_values[0][0])
      

      输出:

      3
      array([-0.0176954 ,  0.50644615,  5.56584344,  3.43032313])
      

      在我看来是一样的。

      【讨论】:

      • 这很奇怪 - 我只是在使用 predict 时得到预测。
      • 尝试逐行复制建议的代码 sn-p 并查看它与您的不同之处/不同之处
      • 啊..找到了!我的模型初始化中有predict_contrib 而不是predict 方法
      • 可能也是原因!
      • .predict()方法中应该是pred_contrib=True
      猜你喜欢
      • 2018-09-16
      • 2023-01-21
      • 1970-01-01
      • 2021-02-23
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      相关资源
      最近更新 更多