SHAP 内核解释器

Python 可解释性 AI

Fouad Trad

Machine Learning Engineer

SHAP 内核解释器

 

  • 适用于任意模型,计算 SHAP 值

    • K 近邻
    • 神经网络
    • 树模型
  • 比类型专用解释器更慢

图示:SHAP 解释器分为通用解释器(适用于任意模型)与类型专用解释器(针对特定模型优化)。

Python 可解释性 AI

心脏病

age sex chest_pain_type blood_pressure ecg_results thalassemia target
52 1 0 125 1 3 0
53 1 0 140 0 3 0
70 1 0 145 1 3 0
61 1 0 148 1 3 0
62 0 0 138 1 2 0

 

mlp_clf: 多层感知机,预测心脏病风险

Python 可解释性 AI

保险费用

age gender bmi children smoker charges
19 0 27.900 0 1 16884.92
18 1 33.770 1 0 1725.55
28 1 33.000 3 0 4449.46
33 1 22.705 0 0 21984.47
32 1 28.880 0 0 3866.85

 

mlp_reg: 多层感知机,预测保险费用

Python 可解释性 AI

创建内核解释器

MLPRegressor
import shap


explainer = shap.KernelExplainer( # 模型的预测函数, # 数据集的代表性摘要 )
MLPClassifier
import shap


explainer = shap.KernelExplainer( # 模型的预测函数, # 数据集的代表性摘要 )
Python 可解释性 AI

创建内核解释器

MLPRegressor
import shap

explainer = shap.KernelExplainer(
  mlp_reg.predict, 
  # 数据集的代表性摘要
)


MLPClassifier
import shap

explainer = shap.KernelExplainer(
  mlp_clf.predict_proba, 
  # 数据集的代表性摘要
)


Python 可解释性 AI

创建内核解释器

MLPRegressor
import shap

explainer = shap.KernelExplainer(
  mlp_reg.predict, 
  shap.kmeans(X, 10)
)


shap_values_reg = explainer.shap_values(X)
MLPClassifier
import shap

explainer = shap.KernelExplainer(
  mlp_clf.predict_proba, 
  shap.kmeans(X, 10)
)


shap_values_cls = explainer.shap_values(X)
Python 可解释性 AI

特征重要性

MLPRegressor
mean_reg = np.abs(shap_values_reg).mean(axis=0)

plt.bar(X.columns, mean_reg)

回归任务的特征重要性条形图,显示吸烟与年龄对预测费用影响最大。

MLPClassifier
mean_cls = np.abs(shap_values_cls[:,:,1]).mean(axis=0)

plt.bar(X.columns, mean_cls)

分类任务的特征重要性条形图,显示胸痛类型与地中海贫血对预测结果影响最大。

Python 可解释性 AI

与模型专用方法对比

线性回归
plt.bar(X.columns, np.abs(lin_reg.coef_))

线性回归的特征重要性条形图,显示吸烟与年龄对预测费用影响最大。

逻辑回归
plt.bar(X.columns, np.abs(log_reg.coef_[0]))

分类任务的特征重要性条形图,显示胸痛类型对预测结果影响最大。

Python 可解释性 AI

Passons à la pratique !

Python 可解释性 AI

Preparing Video For Download...