本文解说一种比拟全能的『机器学习模型可解释性』办法——SHAP。通过调用Python的SHAP工具库,对机器学习模型做可解释性剖析,判断不同特色对于以后模型的重要水平。

作者:韩信子@ShowMeAI
机器学习实战系列:https://www.showmeai.tech/tutorials/41
本文地址:https://www.showmeai.tech/article-detail/337
申明:版权所有,转载请分割平台与作者并注明出处
珍藏ShowMeAI查看更多精彩内容

近年来,可解释的人工智能(XAI)和可解释的机器学习引起了越来越多的关注,因为间接把模型当做黑箱应用信任度和可控度都会受影响。有一些畛域,模型的可解释性更加重要,例如在医疗畛域,患者会质疑为什么模型诊断出他们患有某种疾病。

在本篇内容中, ShowMeAI 将给大家解说一个风行的模型解释办法 SHAP(SHapley Additive exPlanations),并基于理论案例解说如何基于工具库对模型做解释。

模型可解释办法的划分

咱们对各类模型可解释办法进行划分,有以下一些划分维度:

  • 模型无关和模型特定:一些办法可用于各种模型,而另一些办法是为解释特定模型而创立的。
  • 全局和部分解释:本地意味着进行剖析以理解如何做出特定预测。 另一方面,全局解释钻研了影响所有预测的因素。
  • 基于模型和预先归因:基于模型的模型是咱们能够间接了解的模型,例如线性回归模型。 另一类是预先解释模型的归因办法,大多数办法都属于这一类。

SHAP 原理

SHAP 全称是 SHapley Additive exPlanation,是比拟全能的模型可解释性的办法,既可作用于全局解释,也能够部分解释,即单个样本来看,模型给出的预测值和某些特色可能的关系,能够用SHAP来解释。

SHAP 属于模型预先解释的办法,核心思想是计算特色对模型输入的边际奉献,再从全局和部分两个层面对『黑盒模型』进行解释。SHAP 构建一个加性的解释模型,所有的特色都视为『贡献者』。

对于每个预测样本,模型都产生一个预测值,SHAP value 就是该样本中每个特色所调配到的数值。

根本思维:计算一个特色退出到模型时的边际奉献,而后思考到该特色在所有的特色序列的状况下不同的边际奉献,取均值,即某该特色的 SHAP baseline value。

案例实战解说

咱们来拿一个场景案例解说一下SHAP如何进行模型可解释剖析,用到的数据是人口普查数据,咱们会调用 Python 的工具库库 SHAP 间接分析模型。

数据阐明

ShowMeAI在本例中应用到的是 美国人口普查支出数据集,工作是依据人口根本信息预测其年收入是否可能超过 50,000 美元,是一个二分类问题。

数据集能够在以下地址下载:

  • https://archive.ics.uci.edu/ml/datasets/Adult
  • https://archive.ics.uci.edu/ml/machine-learning-databases/adult/

数据从美国1994年人口普查数据库抽取而来,能够用来预测居民收入是否超过50K/year。

  • 该数据集类变量为年收入是否超过50k,属性变量蕴含年龄、工种、学历、职业、人种等重要信息,值得一提的是,14个属性变量中有7个类别型变量。
  • 数据集各属性是:其中序号0~13是属性,14是类别。
字段序号字段名含意类型
0age年龄Double
1workclass工作类型*string
2fnlwgt序号string
3education教育水平*string
4education_num受教育工夫double
5maritial_status婚姻状况*string
6occupation职业*string
7relationship关系*string
8race种族*string
9sex性别*string
10capital_gain资本收益string
11capital_loss资本损失string
12hours_per_week每周工作小时数double
13native_country寄籍*string
14(label)income支出标签string

SHAP计算 & 模型解释

from sklearn.model_selection import train_test_splitimport lightgbm as lgbimport shapshap.initjs()X,y = shap.datasets.adult()X_display,y_display = shap.datasets.adult(display=True)# create a train/test split# 训练集与测试集切分及解决X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7)d_train = lgb.Dataset(X_train, label=y_train)d_test = lgb.Dataset(X_test, label=y_test)# create a simple model# 模型参数params = {    "max_bin": 512,    "learning_rate": 0.05,    "boosting_type": "gbdt",    "objective": "binary",    "metric": "binary_logloss",    "num_leaves": 10,    "verbose": -1,    "min_data": 100,    "boost_from_average": True}# 模型训练model = lgb.train(params, d_train, 10000, valid_sets=[d_test], early_stopping_rounds=50, verbose_eval=1000)# explain the model# 模型解释explainer = shap.TreeExplainer(model)shap_values = explainer.shap_values(X)# visualize the impact of each featuresshap.summary_plot(shap_values, X)

上图中的SHAP后果值,通知咱们不同的特色维度(输出)对于以后模型的重要水平,包含总体的重要水平,以及对每个类别的断定的影响水平。

参考资料

  • SHAP 文档:https://shap.readthedocs.io/en/latest/index.html
  • 美国人口普查支出数据集:https://archive.ics.uci.edu/ml/datasets/census+income

举荐浏览

  • 数据分析实战系列 :https://www.showmeai.tech/tutorials/40
  • 机器学习数据分析实战系列:https://www.showmeai.tech/tutorials/41
  • 深度学习数据分析实战系列:https://www.showmeai.tech/tutorials/42
  • TensorFlow数据分析实战系列:https://www.showmeai.tech/tutorials/43
  • PyTorch数据分析实战系列:https://www.showmeai.tech/tutorials/44
  • NLP实战数据分析实战系列:https://www.showmeai.tech/tutorials/45
  • CV实战数据分析实战系列:https://www.showmeai.tech/tutorials/46
  • AI 面试题库系列:https://www.showmeai.tech/tutorials/48