SHAP 是一种解释机器学习模型预测结果的方法,它基于博弈论中的 Shapley 值理论。 它通过计算每个特征对模型输出的贡献度,帮助我们理解模型的决策过程。 SHAP 适用于各种类型的机器学习模型,使得黑盒模型(如深度神经网络、随机森林等)的预测更加透明、可解释。
SHAP 是一种解释机器学习模型预测结果的方法,它基于博弈论中的 Shapley 值理论。
它通过计算每个特征对模型输出的贡献度,帮助我们理解模型的决策过程。
SHAP 适用于各种类型的机器学习模型,使得黑盒模型(如深度神经网络、随机森林等)的预测更加透明、可解释。
核心概念
- Shapley 值源自博弈论的 Shapley 值,用于公平地分配合作博弈中各参与者的收益。在机器学习中,SHAP 通过计算每个特征在不同组合中的边际贡献,求取其平均值,从而得到该特征的 Shapley 值。这种方法确保了模型解释的公平性和一致性。
- 可加性解释模型SHAP 构建了一个可加性的解释模型,将模型的预测结果表示为各特征贡献的线性组合。这种方法确保了特征贡献的总和等于模型的预测值,从而提供了一种一致且直观的解释方式。
SHAP的主要特点
1.一致性
如果模型的特征贡献增加,那么相应的SHAP值也会增加,确保解释的合理性。
2.局部解释
SHAP值可以解释单个样本的预测结果,帮助理解特定数据点的模型决策。
3.全局解释
通过对多个数据点的SHAP值进行汇总,提供模型整体行为的洞察。
SHAP的优势
- 模型无关性SHAP 适用于多种机器学习模型,包括线性模型、树模型和深度学习模型等。
- 理论基础SHAP基于Shapley值,具有坚实的理论支持,确保解释的公平性和一致性。
- 可视化能力SHAP提供多种可视化工具,帮助直观地理解特征对模型预测的影响。
案例分享
下面,我们来训练一个 XGBoost 模型并计算 SHAP 值来解释每个特征如何影响预测。
首先,我们加载数据集(加利福尼亚住房数据集)并训练一个 XGBoost 模型
复制
import shap import xgboost as xgb import pandas as pd import numpy as np from sklearn.datasets import fetch_california_housing from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # 加载加利福尼亚住房数据集 california_housing = fetch_california_housing() X, y = california_housing.data, california_housing.target feature_names = california_housing.feature_names X = pd.DataFrame(X, columns=feature_names) # 拆分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) model = xgb.XGBRegressor(random_state=42) model.fit(X_train, y_train)
接下来,计算训练集上的 SHAP值,并使用 shap.summary_plot 展示了各特征对模型预测的总体影响。
复制
explainer = shap.Explainer(model,X_train) shap_values = explainer(X_train) shap.summary_plot(shap_values, X_train, feature_names=feature_names)
下图按所有样本的 SHAP 值大小总和对特征进行排序,并使用 SHAP 值显示每个特征对模型输出的影响的分布。
我们还可以只取每个特征的 SHAP 值的平均绝对值来获得标准条形图。
复制
shap.plots.bar(shap_values,show=False)
最后,我们使用 shap.force_plot 展示了单个样本的特征贡献,帮助我们理解模型对该样本的具体预测。
复制
shap.initjs() # 初始化JS以便显示交互图 shap.force_plot(explainer.expected_value, shap_values.values[0, :], X_train.iloc[0])