首页 > 编程问答 >线性模型的 SHAP 值与手动计算的值不同

线性模型的 SHAP 值与手动计算的值不同

时间:2024-07-27 13:29:33浏览次数:3  
标签:python machine-learning shap xai

我训练一个线性模型来预测房价,然后我将手动计算的 Shapley 值与 SHAP 库返回的值进行比较,它们略有不同。

我的理解是,对于线性模型,Shapley 值是给定的通过:

coeff * features for obs - coeffs * mean(features in training set)

或者如SHAP文档中所述: coef[i] * (x[i] - X.mean(0)[i]) ,其中i是一个特征。

问题是,为什么SHAP返回与手动计算不同的值?

这里是代码:| ||返回结果:

import pandas as pd
from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import shap

X, y = fetch_california_housing(return_X_y=True, as_frame=True)
X = X.drop(columns = ["Latitude", "Longitude", "AveBedrms"])

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0,
)

scaler = MinMaxScaler().set_output(transform="pandas").fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

linreg = LinearRegression().fit(X_train, y_train)
coeffs = pd.Series(linreg.coef_, index=linreg.feature_names_in_)

X_test.reset_index(inplace=True, drop=True)
obs = 6188

# manual shapley calculation
effect = coeffs * X_test.loc[obs]
effect - coeffs * X_train.mean()

SHAP 库返回的内容略有不同:

MedInc        0.123210
HouseAge     -0.459784
AveRooms     -0.128162
Population    0.032673
AveOccup     -0.001993
dtype: float64

这里结果:

explainer = shap.LinearExplainer(linreg, X_train)
shap_values = explainer(X_test)
shap_values[obs]

它被设置为忽略交互:

.values =
array([ 0.12039244, -0.47172515, -0.12767778,  0.03473923, -0.00251017])

.base_values =
2.0809714707337523

.data =
array([0.25094137, 0.01960784, 0.06056066, 0.07912217, 0.00437137])

返回

explainer.feature_perturbation

returning

'interventional'

SHAP 库返回的值与手动计算的值之间的细微差异是由于 SHAP 包中 LinearExplainer 使用的实现造成的。虽然两种方法都基于 Shapley 值,但 SHAP 的实现包含了一些细微的调整,以提高效率和处理各种情况。

以下是差异的一些可能原因:

  1. 特征相关性: 你的手动计算假设特征之间相互独立。但是,如果特征之间存在相关性,则 SHAP 库会考虑到这一点来提供更准确的 Shapley 值。它不会简单地将每个特征的贡献相加,而是会考虑特征之间的交互。

  2. 基值: SHAP 库计算一个基值,该值代表所有特征缺失时模型的平均预测。此基值随后用于计算 Shapley 值。你的手动计算似乎没有考虑基值。在你的代码中, shap_values[obs] .base_values 属性表示该基值。

  3. 正则化: 如果你的线性模型包含正则化(例如 L1 或 L2 正则化),则 SHAP 库会在计算 Shapley 值时考虑到这一点。你的手动计算可能不会考虑到正则化的影响。

  4. 数值精度: 在两种方法中进行计算时,舍入误差和数值精度也可能导致微小的差异。

要使手动计算更接近 SHAP 库的结果,你需要考虑以下因素:

  • 基值: 从 SHAP 库中获取基值,并将其添加到手动计算中。
  • 特征相关性: 如果特征之间存在相关性,则你的手动计算需要考虑这一点。这可能很复杂,需要对 Shapley 值有更深入的了解。

一般来说,建议使用 SHAP 库来计算 Shapley 值,因为它提供了更稳健且准确的实现,尤其是在处理复杂模型或特征相关性时。 但是,了解两种方法之间的差异有助于深入了解 SHAP 值的工作原理。

标签:python,machine-learning,shap,xai
From: 78796974

相关文章

  • Python数据分析案例55——基于LSTM结构自编码器的多变量时间序列异常值监测
    案例背景时间序列的异常值检测是方兴未艾的话题。比如很多单变量的,一条风速,一条用电量这种做时间序列异常值检测,想查看一下哪个时间点的用电量异常。多变量时间序列由不同变量随时间变化的序列组成,这些时间序列在实际应用中通常来自不同的传感器或数据源。多变量时间序列异......
  • 我没有 python 但我有 python3
    我最近格式化了我的笔记本电脑并安装了Ubuntu操作系统。我没有明确安装Python。为了检查它是否已预安装,我在终端中运行python--version并得到了这个:$python--versionCommand'python'notfound,butcanbeinstalledwith:sudoaptinstallpython3......
  • 基于YOLOv9的停车场空闲车位检测【python源码+UI界面+数据集+模型+语音报警+安装说明
    往期精品导航基于YOLOv9的脑肿瘤区域检测智慧课堂基于YOLOv8的学生上课行为检测基于YOLOv9+pyside的安检仪x光危险物物品检测(有ui)基于YOLOv9的PCB板缺陷检测基于YOLOv9的线路绝缘子缺陷检测【python源码+UI界面+数据集+模型+语音报警+安装说明】基于YOLOv9的道路状况检测【......
  • 1-python的数据类型与变量
    一、交互模式与脚本模式交互模式:就相当于一种问答模式,关闭即消失无法保存重用比如python自带的编译器脚本模式:可以将代码长期保存以及重复使用如何创建脚本模式:idle——file——newfile[快捷方式:idle——ctrl+n]保存:ctrl+s运行:F5二、变量(Variable)变量:会变化......
  • 2-Python数据类型——序列
    Python数据类型——序列一、序列序列是一个可以存放多个值的容器。有序序列:在序列中每个值都有对应的下标下标:就相当于酒店的房间号,方便客人的查找与酒店的管理在编程中下标的起始值与日常生活中的计数有所不同:下标的计数从0开始计数,从左往右计数:下标从0开始往右递......
  • crontab 运行 .sh 文件调用 python 脚本
    我有一个pythonselenium脚本,可以打开chrome并为我运行一些自动化任务。在crontab中直接调用python可以使用下面的行。:10.0是我运行echo$DISPLAY时得到的值。我使用的是Ubuntu22.04.4LTS5823**2DISPLAY=:10.0/usr/bin/python3/home/user/Script......
  • Pythonanywhere - ping:套接字:不允许操作
    请帮忙。我有一个Telegram机器人,当我从Bash控制台启动他时,它每60秒ping一次静态IP-它工作正常,但每天停止工作一次。我尝试使用“始终开启任务”,但在日志文件中收到“ping:套接字:不允许操作”。我有5美元帐户,我能做什么?从Bash控制台运行时我看到的内容:---17......
  • python+flask计算机毕业设计社区疫情防控物资调配平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,全球公共卫生事件的频发,尤其是新冠疫情的爆发,对社区治理与应急响应能力提出了前所未有的挑战。社区作为疫情防控的第一线,其物资调配......
  • python+flask计算机毕业设计四川工商学院疫情防控系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在全球新冠疫情持续蔓延的背景下,高校作为人员密集、流动性大的特殊场所,其疫情防控工作显得尤为重要。四川工商学院作为一所集教学、科研、......
  • python+flask计算机毕业设计企业人事管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与业务复杂度的提升,传统的人事管理方式已难以满足现代企业对高效、精准、自动化管理的需求。企业人事管理涉及员工......