使用 SHAP 使機器學習模型變的可解釋!!
SHAP 是一種解釋機器學習模型預測結果的方法,它基于博弈論中的 Shapley 值理論。
它通過計算每個特征對模型輸出的貢獻度,幫助我們理解模型的決策過程。
SHAP 適用于各種類型的機器學習模型,使得黑盒模型(如深度神經網絡、隨機森林等)的預測更加透明、可解釋。
核心概念
- Shapley 值
源自博弈論的 Shapley 值,用于公平地分配合作博弈中各參與者的收益。
在機器學習中,SHAP 通過計算每個特征在不同組合中的邊際貢獻,求取其平均值,從而得到該特征的 Shapley 值。這種方法確保了模型解釋的公平性和一致性。 - 可加性解釋模型
SHAP 構建了一個可加性的解釋模型,將模型的預測結果表示為各特征貢獻的線性組合。
這種方法確保了特征貢獻的總和等于模型的預測值,從而提供了一種一致且直觀的解釋方式。
SHAP的主要特點
1.一致性
如果模型的特征貢獻增加,那么相應的SHAP值也會增加,確保解釋的合理性。
2.局部解釋
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])