玉溪住房和城乡建设局网站,久久建筑网怎么样,网站阶段推广计划,如何创建本地站点本篇博客介绍另一种事后可解释性方法#xff1a;SHAP(SHapley Additive exPlanation)方法。
1. Shapley值理论 Shapley值是博弈论中的一个概念#xff0c;通过衡量联盟中各成员对联盟总目标的贡献程度#xff0c;从而根据贡献程度来进行联盟成员的利益分配#xff0c;避免… 本篇博客介绍另一种事后可解释性方法SHAP(SHapley Additive exPlanation)方法。
1. Shapley值理论 Shapley值是博弈论中的一个概念通过衡量联盟中各成员对联盟总目标的贡献程度从而根据贡献程度来进行联盟成员的利益分配避免了分配的平均主义。 当Shapley理论用于解释机器学习模型的时候将输入特征xxx视为参与成员模型输出的概率分布f(x)f(x)f(x)视为联盟总目标通过衡量各特征的贡献度来挖掘重要特征从而提供可解释性判断依据。其数学模型如下g(Z′)φ0∑j1MφjZj′≈f(x)(1)g(Z^{})\varphi_{0}\sum_{j1}^{M}\varphi_{j}Z^{}_{j}\approx f(x) \tag{1}g(Z′)φ0j1∑MφjZj′≈f(x)(1)其中ggg是解释模型f(x)f(x)f(x)是原机器学习模型Zj′{0,1}MZ^{}_{j}\{0,1\}^{M}Zj′{0,1}M表示相应特征是否被观察到MMM是输入特征的数目φi\varphi_{i}φi是每个特征的归因值φ0\varphi_{0}φ0是解释模型的常数。 对于一个特定的输入数据x0x_{0}x0其Shapley值的计算公式如下φi(f,x0)∑S⊆NS/{i}∣S∣!(M−∣S∣−1)!∣NS∣\varphi_{i}(f,x_{0})\sum_{S\subseteq N_{S}/ \{i\}}\frac{|S|!(M-|S|-1)!}{|N_{S}|!}[f(S\cup\{i\})-f(S)]\tag{2}φi(f,x0)S⊆NS/{i}∑∣NS∣!∣S∣!(M−∣S∣−1)其中φi(f)\varphi_{i}(f)φi(f)代表函数fff中特征iii的贡献度NSN_{S}NS是所有特征组成的集合SSS代表特征子集NS/{i}N_{S}/\{i\}NS/{i}代表在集合NSN_{S}NS中去除特征iiiS∪{i}S\cup \{i\}S∪{i}表示子集SSS中增加特征iii∣S∣|S|∣S∣表示集合SSS中元素的个数。 为了方面公式(2)的计算通常将公式(2)转化为如下公式计算φi(f,x0)∑z′∈{0,1}M∣z′∣!(M−∣z′∣−1)!M\varphi_{i}(f,x_{0})\sum_{z^{}\in\{0,1\}^{M}}\frac{|z^{}|!(M-|z^{}|-1)!}{M!}[f_{S}(z^{})-f_{S}(z^{}|i)]\tag{3}φi(f,x0)z′∈{0,1}M∑M!∣z′∣!(M−∣z′∣−1)其中fSE[f(x)∣zS′]1N∑j1Nf(xj′)f_{S}E[f(x)|z_{S}^{}]\frac{1}{N}\sum_{j1}^{N}f(x_{j}^{})fSE[f(x)∣zS′]N1j1∑Nf(xj′)其中zS′z_{S}^{}zS′为集合SSS中特征的取值所组成的集合NNN为原函数fff训练数据的个数xj′x_{j}^{}xj′的取值如下xj′{x0i,Fi∈zS′xji,Fi∉zS′x_{j}^{}\left\{\begin{aligned} x_{0i}, F_{i}\in z_{S}^{} \\ x_{ji},F_{i}\notin z_{S}^{} \end{aligned}\right. xj′{x0i,xji,Fi∈zS′Fi∈/zS′其中x0ix_{0i}x0i为待解释数据x0x_{0}x0的第iii个特征值xjix_{ji}xji表示第jjj个训练数据中第iii个特征的取值FiF_{i}Fi表示第iii个特征值。 SHAP值具备扎实的理论基础但φi\varphi_{i}φi的计算复杂度和E[f(x)∣zS′]E[f(x)|z_{S}^{}]E[f(x)∣zS′]的有效估计是其在实际应用中的最大阻碍为了解决这个问题Lundberg等人提出了Tree SHAP方法。 Tree SHAP是用于树模型的快速SHAP值估计方法大大增加了SHAP值的实际应用能力。
2 SHAP包用法 这里仍然以Boston房价为例使用XGBoost方法训练模型。其用法举例如下 模型训练
import pandas as pd
import numpy as np
from sklearn.datasets import load_boston
from xgboost import XGBRegressor
from sklearn.model_selection import train_test_split
import shap
shap.initjs()
#分类
bostonload_boston()
Xboston.data
yboston.target
featuresboston.feature_names
X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_state0)xgbrXGBRegressor(n_estimators200,max_depth4)
xgbr.fit(X_train,y_train)对单个样本进行解释
explainershap.TreeExplainer(xgbr)
shap_valuesexplainer.shap_values(X_test[1].reshape(1,-1))
shap.force_plot(explainer.expected_value,shap_values,X_test[1].reshape(1,-1),feature_namesfeatures)其结果如下 关于上图有以下几个方面需要说明
base_value:全体样本Shape平均值这里的全体样本指的是模型的训练样本output_value: 当前样本的Shap输出值即为模型的预测值正向作用特征红色特征即为正向作用的特征反向作用特征蓝色特征即为反向作用的特征
整个测试集的Shap分布
explainershap.TreeExplainer(xgbr)
shap_valuesexplainer.shap_values(X_test)
shap.force_plot(explainer.expected_value,shap_values,X_test,feature_namesfeatures)其结果如下(可以通过调节横纵坐标观察当个特征的效果): 从特征角度观察样本Shap值
shap.summary_plot(shap_values,X_test,feature_namesfeatures)其结果如下
参考文献
《基于图模型机器学习算法的可解释性技术研究与实现》《稳定评估机器学习模型可解释性研究》https://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/106131890