【问题标题】:How to convert SHAP Values into Probabilities?如何将 SHAP 值转换为概率?
【发布时间】:2021-11-22 08:27:56
【问题描述】:

我正在使用 Python 中的 Shap 库来解释我使用 Catboost 的模型。在尝试使用多个绘图时,我使用以下命令:

shap.summary_plot(shap_values, X_train)
shap.force_plot(explainer.expected_value, shap_values, X_train)
shap.dependence_plot("some feature", shap_values, X_train)

每个的输出都给了我 x 轴上的形状值,但是我无法解释它并认为它更容易使用概率。我怎么能做到这一点?

我读到 Catboost 不能使用:explainer = shap.TreeExplainer(model,data = X,model_output='probability')

因此,我不知道该怎么办。

【问题讨论】:

    标签: python shap


    【解决方案1】:

    您可以考虑使用 force_plot 上的日志链接,这显示在 the shap vignette 中,例如:

    import shap
    import numpy as np
    from sklearn.model_selection import train_test_split
    shap.initjs()
    
    X,y = shap.datasets.iris()
    y = np.where(y==1,1,0)
    
    X_train,X_test,Y_train,Y_test = train_test_split(X,y, test_size=0.2, random_state=0)
    
    from catboost import CatBoostClassifier, Pool
    
    model = CatBoostClassifier(verbose=False)
    model.fit(X_train,Y_train)
    
    explainer = shap.KernelExplainer(model.predict_proba, X_train, link="logit")
    shap_values = explainer.shap_values(X_test, nsamples=10)
    shap.force_plot(explainer.expected_value[2], shap_values[2], X_test, link="logit")
    

    由此您可以跨所有样本,了解每个特征对最终概率的影响

    【讨论】:

    • 谢谢!我将如何为其他两个地块做到这一点?我尝试添加链接功能,但这不适用于那些。有什么想法吗?
    • 你不能在其他两个地块上这样做..那样不行
    猜你喜欢
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多