一文带您了解SHAP:机器学习的模型解释


在机器学习和数据科学领域,模型的可解释性一直是研究者和实践者关注的焦点。随着深度学习和集成方法等复杂模型的广泛应用,理解模型的决策过程变得尤为重要。可解释人工智能(Explainable AI | XAI)通过提高模型的透明度,帮助建立对机器学习模型的信任和信心。 提高模型的透明度可以通过多种复杂模型的广泛应用等方法来实现,以及用于解释模型的决策过程。这些方法包括特征重要性分析、模型预测区间估计、局部可解释性算法等。特征重要性分析可以通过评估模型对输入特征的影响程度来解释模型的决策过程。模型预测区间估计可以提供模型预测的确定性信息。局部可解释性算法可以帮

xai是一套工具和框架,用于理解和解释机器学习模型如何做出决策。其中,python中的shap(shapley additive explanations)库是一个非常有用的工具。shap库能够量化特征对单个预测及整体预测的贡献,并提供美观且易于使用的可视化功能。

接下来,我们将概括介绍下SHAP库的基础知识,以理解在Scikit-learn中构建的回归和分类模型的预测。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

一文带您了解SHAP:机器学习的模型解释

SHAP 和SHAP values

SHAP(Shapley Additive Explanations)是一种解释任何机器学习模型输出的博弈论方法。它利用经典的博弈论博弈值及其相关扩展,将最优的信用分配与局部解释相结合(详细信息和引用请参阅相关论文:https://github.com/shap/shap#citations)。SHAP通过计算每个特征对模型输出的贡献,从而提供最优的信用分配和局部解释。这种方法可以应用于各种模型类型,包括线性模型、树模型、深度学习模型等。SHAP的目标是提供一种直观且可解释的方式,帮助人们理解机器学习模型的决策过程,以及各个特征对于预测结果的影响程度。通过使用SHAP值和相关扩展,我们可以获得更准确、全面的特征重要性解释,并对模型的预

SHAP+ values可以帮助我们量化特征对预测的贡献。SHAP值越接近于零,表示该特征对预测的贡献越小;而SHAP值越远离零,表示该特征对预测的贡献越大。此外,SHAP值还可以告诉我们特征对预测的贡献大小。当SHAP值接近于零时,表示该特征对预测的贡献很小;而当SHAP值远离零时,

安装shap 包:

pip install shap-i https://pypi.tuna.tsinghua.edu.cn/simple

我们看下面的示例:如何在回归问题中获取特征的SHAP值。我们将从加载库和示例数据开始,然后快速构建一个模型来预测糖尿病的进展情况:

import numpy as npnp.set_printoptions(formatter={'float':lambda x:"{:.4f}".format(x)})import pandas as pdpd.options.display.float_format = "{:.3f}".formatimport seaborn as snsimport matplotlib.pyplot as pltsns.set(style='darkgrid', context='talk', palette='rainbow')from sklearn.datasets import load_diabetesfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import (RandomForestRegressor, RandomForestClassifier)import shapshap.initjs()# Import sample datadiabetes = load_diabetes(as_frame=True)X = diabetes['data'].iloc[:, :4] # Select first 4 columnsy = diabetes['target']# Partition dataX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)print(f"Training features shape: {X_train.shape}")print(f"Training target shape: {y_train.shape}\n")print(f"Test features shape: {X_test.shape}")print(f"Test target shape: {y_test.shape}")display(X_train.head())# Train a simple modelmodel = RandomForestRegressor(random_state=42)model.fit(X_train, y_train)

一文带您了解SHAP:机器学习的模型解释

一种常见的获取SHAP值的方法是使用Explainer对象。接下来创建一个Explainer对象,并为测试数据提取shap_test值:

explainer = shap.Explainer(model)shap_test = explainer(X_test)print(f"Shap values length: {len(shap_test)}\n")print(f"Sample shap value:\n{shap_test[0]}")

一文带您了解SHAP:机器学习的模型解释

shap_test的长度为89,因为它包含了每个测试实例的记录。从查看第一个测试记录中,我们可以看到它包含三个属性:

shap_test[0].base_values:目标的基准值

shap_test[0].data:每个特征的值

shap_test[0].values:每个对象的SHAP值

  • 基准值:基准值(shap_test.base_values),也称为期望值(explainer.expected_value),是训练数据中目标值的平均值。
print(f"Expected value: {explainer.expected_value[0]:.1f}")print(f"Average target value (training data): {y_train.mean():.1f}")print(f"Base value: {np.unique(shap_test.base_values)[0]:.1f}")

一文带您了解SHAP:机器学习的模型解释

  • shap_test.data 包含与 X_test 相同的值
(shap_test.data == X_test).describe()

一文带您了解SHAP:机器学习的模型解释

  • values:shap_test 最重要的属性是 values 属性,因为我们可以通过它访问 SHAP 值。让我们将 SHAP 值转换为 DataFrame,以便于操作:
shap_df = pd.DataFrame(shap_test.values,  columns=shap_test.feature_names,  index=X_test.index)shap_df

一文带您了解SHAP:机器学习的模型解释

可以看到每条记录中每个特征的 SHAP 值。如果将这些 SHAP 值加到期望值上,就会得到预测值:

一文带您了解SHAP:机器学习的模型解释

np.isclose(model.predict(X_test),  explainer.expected_value[0] + shap_df.sum(axis=1))

一文带您了解SHAP:机器学习的模型解释

现在我们已经有了 SHAP 值,可以进行自定义可视化,如下图所示,以理解特征的贡献:

columns = shap_df.apply(np.abs).mean()\ .sort_values(ascending=False).indexfig, ax = plt.subplots(1, 2, figsize=(11,4))sns.barplot(data=shap_df[columns].apply(np.abs), orient='h', ax=ax[0])ax[0].set_title("Mean absolute shap value")sns.boxplot(data=shap_df[columns], orient='h', ax=ax[1])ax[1].set_title("Distribution of shap values");plt.show()

一文带您了解SHAP:机器学习的模型解释

左侧子图显示了每个特征的平均绝对 SHAP 值,而右侧子图显示了各特征的 SHAP 值分布。从这些图中可以看出,bmi 在所使用的4个特征中贡献最大。

Shap 内置图表

虽然我们可以使用 SHAP 值构建自己的可视化图表,但 shap 包提供了内置的华丽可视化图表。在本节中,我们将熟悉其中几种选择的可视化图表。我们将查看两种主要类型的图表:

  • 全局:可视化特征的整体贡献。这种类型的图表显示了特征在整个数据集上的汇总贡献。
  • 局部:显示特定实例中特征贡献的图表。这有助于我们深入了解单个预测。
  • 条形图/全局:对于之前显示的左侧子图,有一个等效的内置函数,只需几个按键即可调用:
shap.plots.bar(shap_test)

一文带您了解SHAP:机器学习的模型解释

这个简单但有用的图表显示了特征贡献的强度。该图基于特征的平均绝对 SHAP 值而生成:shap_df.apply(np.abs).mean()。特征按照从上到下的顺序排列,具有最高平均绝对 SHAP 值的特征显示在顶部。

  • 总结图/全局:另一个有用的图是总结图:
shap.summary_plot(shap_test)

一文带您了解SHAP:机器学习的模型解释

以下是解释这张图的指南:

灵感PPT 灵感PPT

AI灵感PPT - 免费一键PPT生成工具

灵感PPT 308 查看详情 灵感PPT
  • 图的横轴显示了特征的 SHAP 值分布。每个点代表数据集中的一个记录。例如,我们可以看到对于 BMI 特征,点的分布相当散乱,几乎没有点位于 0 附近,而对于年龄特征,点更加集中地分布在 0 附近。
  • 点的颜色显示了特征值。这个额外的维度允许我们看到随着特征值的变化,SHAP 值如何变化。换句话说,我们可以看到关系的方向。例如,我们可以看到当 BMI 较高时(由热粉色点表示)SHAP 值倾向于较高,并且当 BMI 较低时(由蓝色点表示)SHAP 值倾向于较低。还有一些紫色点散布在整个光谱中。

  • 热力图/全局:热力图是另一种可视化 SHAP 值的方式。与将 SHAP 值聚合到平均值不同,我们看到以颜色编码的个体值。特征绘制在 y 轴上,记录绘制在 x 轴上:
shap.plots.heatmap(shap_test)

一文带您了解SHAP:机器学习的模型解释

这个热力图的顶部还补充了每个记录的预测值(即 f(x))的线图。

  • Force plot/全局:这个交互式图表允许我们通过记录查看 SHAP 值的构成。
shap.initjs()shap.force_plot(explainer.expected_value, shap_test.values, X_test)

一文带您了解SHAP:机器学习的模型解释

就像热力图一样,x 轴显示每个记录。正的 SHAP 值显示为红色,负的 SHAP 值显示为蓝色。例如,由于第一个记录的红色贡献比蓝色贡献多,因此该记录的预测值将高于期望值。

交互性允许我们改变两个轴。例如,y 轴显示预测值 f(x),x 轴根据输出(预测)值排序,如上面的快照所示。

  • 条形图/局部:现在我们将看一下用于理解个别案例预测的图表。让我们从一个条形图开始:
shap.plots.bar(shap_test[0])

一文带您了解SHAP:机器学习的模型解释

与“ 条形图/全局 ”中完全相同,只是这次我们将数据切片为单个记录。

  1. Force plot/局部:Force plot是单个记录的强制图。
shap.initjs()shap.plots.force(shap_test[0])

一文带您了解SHAP:机器学习的模型解释

分类模型的SHAP values/图表

上面示例是回归模型,下面我们以分类模型展示SHAP values及可视化:

import numpy as npnp.set_printoptions(formatter={'float':lambda x:"{:.4f}".format(x)})import pandas as pdpd.options.display.float_format = "{:.3f}".formatimport seaborn as snsimport matplotlib.pyplot as pltsns.set(style='darkgrid', context='talk', palette='rainbow')from sklearn.datasets import load_diabetesfrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifierimport shapfrom sklearn.datasets import fetch_openml# 加载 Titanic 数据集titanic = fetch_openml('titanic', version=1, as_frame=True)df = titanic.frame# 选择特征和目标变量features = ['pclass', 'age', 'sibsp', 'parch', 'fare']df = df.dropna(subset=features + ['survived'])# 删除包含缺失值的行X = df[features]y = df['survived']# 分割数据集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练随机森林分类器model = RandomForestClassifier(n_estimators=100, random_state=42)model.fit(X_train, y_train)

一文带您了解SHAP:机器学习的模型解释

和回归模型一样的,shap values 值也是包括base_values 和values 值:

explainer = shap.Explainer(model)shap_test = explainer(X_test)print(f"Length of shap_test: {len(shap_test)}\n")print(f"Sample shap_test:\n{shap_test[0]}")print(f"Expected value: {explainer.expected_value[1]:.2f}")print(f"Average target value (training data): {y_train}")print(f"Base value: {np.unique(shap_test.base_values)[0]:.2f}")shap_df = pd.DataFrame(shap_test.values[:,:,1],  columns=shap_test.feature_names,  index=X_test.index)shap_df

我们仔细检查一下将 shap 值之和添加到预期概率是否会给出预测概率:

np.isclose(model.predict_proba(X_test)[:,1],  explainer.expected_value[1] + shap_df.sum(axis=1))

一文带您了解SHAP:机器学习的模型解释

内置图与回归模型是一致的,比如:

shap.plots.bar(shap_test[:,:,1])

一文带您了解SHAP:机器学习的模型解释

或者瀑布图如下:

shap.plots.waterfall(shap_test[:,:,1][0])

一文带您了解SHAP:机器学习的模型解释

示例

看一个具体的用例。我们将找出模型对幸存者预测最不准确的例子,并尝试理解模型为什么会做出错误的预测:

test = pd.concat([X_test, y_test], axis=1)test['probability'] = model.predict_proba(X_test)[:,1]test['order'] = np.arange(len(test))test.query("survived=='1'").nsmallest(5, 'probability')

一文带您了解SHAP:机器学习的模型解释

生存概率为第一个记录的746。让我们看看各个特征是如何对这一预测结果产生贡献的:

ind1 = test.query("survived=='1'")\ .nsmallest(1, 'probability')['order'].values[0]shap.plots.waterfall(shap_test[:,:,1][ind1])

一文带您了解SHAP:机器学习的模型解释

主要是客舱等级和年龄拉低了预测值。让我们在训练数据中找到类似的例子:

pd.concat([X_train, y_train], axis=1)[(X_train['pclass']==3) & (X_train['age']==29) & (X_train['fare'].between(7,8))]

一文带您了解SHAP:机器学习的模型解释

所有类似的训练实例实际上都没有幸存。现在,这就说得通了!这是一个小的分析示例,展示了 SHAP 如何有助于揭示模型为何会做出错误预测。

在机器学习和数据科学中,模型的可解释性一直备受关注。可解释人工智能(XAI)通过提高模型透明度,增强对模型的信任。SHAP库是一个重要工具,通过量化特征对预测的贡献,提供可视化功能。本文介绍了SHAP库的基础知识,以及如何使用它来理解回归和分类模型的预测。通过具体用例,展示了SHAP如何帮助解释模型错误预测。

以上就是一文带您了解SHAP:机器学习的模型解释的详细内容,更多请关注其它相关文章!


# 中东  # 常州网站建设客服热线  # 炎陵新闻营销推广公司  # 厦门网站建设首选推来客  # 凯里网站推广  # 石家庄网站优化推广  # 齐齐哈尔百度营销推广  # 网站建设包括内容  # seo.com.cnl  # 谷歌seo哪家好些  # seo实验视频  # 可以通过  # 较高  # 零时  # 人工智能  # 特征值  # 第一个  # 让我们  # 可以看到  # 带您  # 一文  # fig  # palette  # 排列  # git  # python  # xai  # 机器学习 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 下一个前沿:量子机器学习和人工智能的未来  英媒:硅谷有些人太鼓吹AI,宣扬“学习无用”  《共同的演化》展览启幕,重新思考人类与人工智能关系  【|直播|预告】人工智能高峰论坛将于7月2日13:30准时开播!  谷歌推出新 AI 工具 Imagen Editor,一句话对图片二次创作  7/8上海 | 2025世界人工智能大会分论坛:科技与人文-共筑无障碍智能社会  OpenAI CEO 山姆・阿尔特曼呼吁 AI 领域中美应当合作  学而思网校推出首个基于自研大模型的《人工智能第一课》  人工智能在商业中的风险和局限性  智能机器人正在彻底改变客户服务  印象笔记开放旗下“印象 AI”,可一键生成思维导图、写文章等  麦肯锡:到 2045 年左右,将有 50% 工作被 AI 接管  值得买科技入选“北京市通用人工智能产业创新伙伴计划”应用伙伴  WHEE安装教程  对话无界AI创始人长铗:AI的创业机会在应用层丨创新者Innovator  稿见AI助手:提升写作效率与质量的必备工具  Hugging Face发布了基于NASA卫星数据构建的AI地理空间基础模型  【澎湃原动力】人工智能产业协同创新中心:全产业链资源在这里汇聚  Zoom远程会议应用:AI培训需经用户授权  华为AI大模型将融入HarmonyOS 4  微软必应聊天现已在Chrome和Safari浏览器上可用,但仍有许多限制存在  “聚智启新,‘蓉’力同行” 成都市人工智能产业融通对接会成功举办  张勇对话多位诺奖得主 人工智能将无处不在  人工智能如何改变未来语言?  发布最新版本的 PICO OS 5.7.0:支持VR头盔录屏并跨平台分享至微信  数据科学,解码智能未来——Altair首次提出“Frictionless AI”概念  AI大举入侵内容行业,哪些上市*及动漫公司进行了布局?  AI拉动PCB发展|行业发现  用AI技术点亮老照片:Deep Nostalgia带给照片新生动感  消息称字节机器人团队已有约50人,计划年底扩充到上百人  科学家称,面对人工智能,人类未来或只有灭亡与虚拟永生两个选择  热点资讯:家乐福推出聊天机器人;米哈游2025年营收273.4亿元…  微软宣布为 Azure AI 添加男性声线,增强文本转语音功能  华为推出两款商用 AI 大模型存储新品,支持 1200 万 IOPS 性能  人工智能行业急缺人 AI人才年薪能达近42万元  大语言模型的视觉天赋:GPT也能通过上下文学习解决视觉任务  AI行业盛会大咖云集!Sam Altam、“AI教父”......一文看懂最新观点  【首发】首款“消化内镜手术机器人”进入临床尾声,ROBO医疗获数千万元A轮融资  研究表明 GPT-4 模型具备自我纠错能力,有望推动 AI 代码进一步商业化  看似低调,实则稳健:字节在AI路上会遇到什么?  昇腾AI大模型训推一体化解决方案将在WAIC发布  为AI而服务设计:构建以人为本的AI创新方法  中国联通发布图文AI大模型,可实现以文生图、视频剪辑  阿里达摩院发布免费开放100项AI专利许可的动机是什么?  调查:过半数艺术家认为 AI 作图无法帮助他们的工作  GPT-4使用混合大模型?研究证明MoE+指令调优确实让大模型性能超群  人工智能驱动智能建筑会是未来趋势吗?  在这里见未来!杭州未来科技城全球AI盛会邀您共探最前沿  马斯克称人类是半机器人,记忆外包给了电脑  美图发布国内首个“懂美学的”AI视觉大模型MiracleVision 

 2024-05-23

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.