人工智能的可解释性(XAI) | 使用LIME

news2024/9/25 1:21:47

人工智能(AI)的广阔领域近年来经历了巨大的增长。随着每年更新、更复杂的模型问世,人工智能模型已经开始以无人能预测的速度超越人类智力。但是,随着我们得到更准确和精确的结果,解释这些模型所采取的复杂数学决策背后的推理变得越来越困难。这种数学抽象也不能帮助用户保持对特定模型决策的信任。

例如,在一个实例中,假设一个深度学习模型接收一张图像,并以70%的准确率预测患者患有肺癌。虽然模型可能给出了正确的诊断,但医生不能真正自信地建议患者,因为他/她不知道所述模型诊断背后的推理。

这就是可解释性AI(XAI)的用武之地。

可解释性AI

可解释的AI是指帮助解释给定AI模型的决策过程的技术或方法。这个新发现的人工智能分支已经显示出巨大的潜力,每年都有更新和更复杂的技术出现。一些最著名的XAI技术包括SHAP(Shapley Additive exPlanations)、DeepSHAP、DeepLIFT、CXplain和LIME。

LIME(Local Interpretable Model-agnostic Explanations)

LIME的美在于它的易用性和简单性。LIME背后的核心思想虽然详尽,但确实直观而简单!让我们来看看这个名字本身代表着什么:

  • Model agnosticism是指LIME的属性,它可以通过将任何给定的监督学习模型单独视为“黑盒”给予解释它。这意味着LIME可以处理几乎任何存在的模型!
  • Local explanations意味着LIME给出在被解释的观察/样本的周围或附近局部忠实的解释。

虽然LIME目前仅限于监督机器学习和深度学习模型,但它是最受欢迎和最常用的XAI方法之一。LIME拥有丰富的开源API,可在R和Python中使用。github地址:[https://github.com/marcotcr/lime]

LIME是如何工作的

一般来说,当给定预测模型和测试样本时,LIME执行以下步骤:

  • 采样并获得替代数据集:LIME在被解释的实例附近提供局部忠实的解释。默认情况下,它会生成5000个遵循正态分布的特征向量样本。然后,它使用预测模型获得这5000个样本的目标变量,并试图解释其决策。
  • 替代数据集中的特征选择:在获得替代数据集之后,它根据每行与原始样本/观察的接近程度来加权每行。然后使用Lasso等特征选择技术来获得最重要的特征。

LIME还使用所获得的特征对样本采用岭回归模型。理论上,输出预测应与原始预测模型的输出大小相似。这样做是为了强调这些获得的特征的相关性和重要性。

安装

pip install lime

在继续之前,这里有一些要点,有助于更好地理解围绕LIME的整个工作流程。

数据集描述

LIME在其当前状态下只能对以下类型的数据集给予解释:

  • 表格数据集(lime.lime_tabular.LimeTabularExplainer):例如:回归、分类数据集
  • 图像相关数据集(lime.lime_image.LimeImageExplainer)
  • 文本相关数据集(lime.lime_text.LimeTextExplainer)

由于这是一篇介绍性文章,我们将保持简单,并继续使用表格数据集。更具体地说,我们将使用波士顿房价数据集进行分析。我们将使用Scikit-Learn来加载波士顿数据集。

使用的预测模型
由于LIME本质上是模型不可知的,它可以处理几乎任何抛出的模型。为了强调这一事实,我们将通过Scitkit-learn使用Extra-trees回归器作为我们的预测模型,我们试图调查其决策。

LimeTabularExplainer简介
如上所述,我们将使用表格数据集进行分析。为了处理这样的数据集,LIME的API提供了LimeTabularExplainer。

语法:lime.lime_tablet.LimeTabularExplainer(training_data,mode,feature_names,verbose)
主要参数:
training_data - 由训练数据集组成的2d数组
mode- 取决于问题;“分类”或“回归”
feature_names - 与训练数据集中的列对应的特征列表。如果没有提到,它使用列索引。
verbose - 如果为true,则打印仅使用获得的特征在样本上训练的回归模型的局部预测值

一旦实例化,我们将使用来自定义的解释器对象的方法来解释给定的测试样本。

语法:explain_instance(data_row,predict_fn,num_features=10,num_samples=5000)
主要参数:
data_row -包含与正在解释的测试样本对应的值的1d数组
predict_fn -预测模型使用的预测函数
num_features -解释中存在的最大特征数
num_samples -学习线性模型的邻域大小

为了简洁和简明起见,在上述两种语法中只提到了一些论点。其余的参数,其中大部分默认为一些巧妙优化的值,可以由感兴趣的读者在官方LIME文档中查看[https://lime-ml.readthedocs.io/en/latest/]

工作流程

  1. 数据预处理
  2. 在数据集上训练Extra-trees回归器
  3. 获得给定测试样本的解释

1. 使用Scikit-learn提取数据

# Importing the necessary libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Loading the dataset using sklearn
from sklearn.datasets import load_boston
data = load_boston()

# Displaying relevant information about the data
print(data['DESCR'][200:1420])

输出

Boston house prices dataset
---------------------------

**Data Set Characteristics:**  

    :Number of Instances: 506 

    :Number of Attributes: 13 numeric/categorical predictive. Median Value (attribute 14) is usually the target.

    :Attribute Information (in order):
        - CRIM     per capita crime rate by town
        - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.
        - INDUS    proportion of non-retail business acres per town
        - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
        - NOX      nitric oxides concentration (parts per 10 million)
        - RM       average number of rooms per dwelling
        - AGE      proportion of owner-occupied units built prior to 1940
        - DIS      weighted distances to five Boston employment centres
        - RAD      index of accessibility to radial highways
        - TAX      full-value property-tax rate per $10,000
        - PTRATIO  pupil-teacher ratio by town
        - B        1000(Bk - 0.63)^2 where Bk is the proportion of black people by town
        - LSTAT    % lower status of the population
        - MEDV     Median value of owner-occupied homes in $1000's

    :Missing Attribute Values: None

    :Creator: Harrison, D. and Rubinfeld, D.L.

This is a copy of UCI ML housing dataset.
https://archive.ics.uci.edu/ml/machine-learning-databases/housing/

2. 提取特征矩阵X和目标变量y,并进行训练-测试划分

# Separating data into feature variable X and target variable y respectively
from sklearn.model_selection import train_test_split
X = data['data']
y = data['target']

# Extracting the names of the features from data
features = data['feature_names']

# Splitting X & y into training and testing set
X_train, X_test, y_train, y_test = train_test_split(
	X, y, train_size=0.90, random_state=50)

# Creating a dataframe of the data, for a visual check
df = pd.concat([pd.DataFrame(X), pd.DataFrame(y)], axis=1)
df.columns = np.concatenate((features, np.array(['label'])))
print("Shape of data =", df.shape)

# Printing the top 5 rows of the dataframe
df.head()

输出

Shape of data = (506, 14)

在这里插入图片描述

3. 实例化预测模型并在(X_train,y_train)上对其进行训练

# Instantiating the prediction model - an extra-trees regressor
from sklearn.ensemble import ExtraTreesRegressor
reg = ExtraTreesRegressor(random_state=50)

# Fitting the predictino model onto the training set
reg.fit(X_train, y_train)

# Checking the model's performance on the test set
print('R2 score for the model on test set =', reg.score(X_test, y_test))

输出

R2 score for the model on test set = 0.9183847734063736

4. 实例化解释器对象

# Importing the module for LimeTabularExplainer
from lime import lime_tabular

# Instantiating the explainer object by passing in the training set,
# and the extracted features
explainer_lime = lime_tabular.LimeTabularExplainer(X_train,
												feature_names=features,
												verbose=True,
												mode='regression')

5. 通过调用explain_instance()方法获取解释

  • 假设我们想要探索预测模型对第i个测试向量给出的预测背后的推理。
  • 此外,假设我们想要可视化导致这种推理的前k个特征。

在本文中,我们给出了两种i & k组合的解释:

5.1 解释i=10,k=5的决策

我们基本上要求LIME通过显示对所述模型的预测做出贡献的前5个特征来解释第10个测试向量的预测背后的决定。

# Index corresponding to the test vector
i = 10

# Number denoting the top features
k = 5

# Calling the explain_instance method by passing in the:
# 1) ith test vector
# 2) prediction function used by our prediction model('reg' in this case)
# 3) the top features which we want to see, denoted by k

exp_lime = explainer_lime.explain_instance(
	X_test[i], reg.predict, num_features=k)

# Finally visualizing the explanations
exp_lime.show_in_notebook()

输出

Intercept 20.03385472541795
Prediction_local [33.9748055]
Right: 34.323999999999984

在这里插入图片描述
解释输出:

LIME输出了大量信息,让我们一步一步来解读它想要传达的东西

  1. 首先,我们在可视化上方看到三个值:
    Right:这表示我们的预测模型(在本例中是一个额外树回归器)对给定测试向量给出的预测。
    Prediction_local:这表示由在扰动样本上训练的线性模型输出的值(通过在遵循正态分布的测试向量周围采样而获得)并且仅使用由LIME输出的前k个特征。
    Intercept:截距是由上述线性模型对给定测试向量的预测给出的预测的恒定部分。
    在这里插入图片描述
  2. 在可视化方面,我们可以看到蓝色和橙色,分别描绘了消极和积极的关联。
  • 为了解释上述结果,我们可以得出这样的结论:给定向量所描绘的房屋相对较低的价格价值(如左侧的条形图所示)可以归因于以下社会经济原因:
  • LSTAT高值表明在教育和人口方面的地位水平低
  • PTRATIO的高值表示城镇中的教师学生比例高
  • INDUS的高值表明每个城镇的非零售商业英亩比例很高
  • RAD值越低,辐射型公路可达性指标越低
  • RM值越低,说明每栋住宅的房间量越少

我们可以看到,以一种可解释和有意义的方式将一个相对复杂的预测模型(一个额外的树回归器)所做的决定关联起来是多么容易。

5.2 解释i=47,k=5的决策

这里,我们再次要求LIME通过显示有助于所述模型预测的前5个特征来解释第47个测试向量的预测背后的决策。

# Index corresponding to the test vector
i = 47

# Number denoting the top features
k = 5

# Calling the explain_instance method by passing in the:
# 1) ith test vector
# 2) prediction function used by our prediction model('reg' in this case)
# 3) the top features which we want to see, denoted by k
exp_lime = explainer_lime.explain_instance(
	X_test[i], reg.predict, num_features=k)

# Finally visualizing the explanations
exp_lime.show_in_notebook()

输出

Intercept 20.03666971464815
Prediction_local [33.88485397]
Right: 34.323999999999984

在这里插入图片描述
解释输出:

从可视化中,我们可以得出结论,给定矢量所描绘的房屋的相对较高的价格价值(由左侧的条所描绘)可以归因于以下社会经济原因:

  • LSTAT的低值表明在人口、教育和就业能力方面的地位水平高
  • RM的高值表示每个住宅的房间数高
  • TAX值低说明房产税率低
  • PTRATIO值较低表示城镇中的教师学生比例较低
  • AGE值较低,说明建筑物较新
  • INDUS的平均值表明,社会附近的非零售数量较少,在很小程度上降低了房屋的价值。

总结

本文简要介绍了在Python中使用LIME的可解释AI(XAI)。很明显,LIME可以给予我们提供给定黑盒模型决策过程背后更深刻的解释,同时提供对固有数据集的坚实见解。这使得LIME对AI研究人员和数据科学家很有实用价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2089984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[翻译+笔记] 用于视频生成的Diffusion Model

这次翻译笔记的博客是https://lilianweng.github.io/posts/2021-07-11-diffusion-models/ 在阅读这篇博客前, 推荐先对Diffusion Model进行了解. 可以看我的笔记: https://blog.csdn.net/wjpwjpwjp0831/article/details/141524088 视频相关的任务向来是比图像更有挑战性, 这是…

涉密载体管控系统DW-S402|实现载体全寿命管控

为加强涉密载体使用管控,按照预防为主,强化监督,在满足各级保密规定前提下,方便涉密载体的使用和管理,确保涉密载体保密安全。 现有涉密载体使用过程中,存在手工登记台账耗工耗时、领用情况不直观、违规带…

史上最全Android UI界面设计尺寸!点击收藏

作为一名 UI 设计师,在进行 Android UI 设计之前,首先需要明确 Android 系统与 iOS 系统之间的主要区别。Android 系统是开源的,而 iOS 系统则是不开源的。虽然 Android 系统的开源特性对于交互设计师是有益的,但它也带来了一些挑…

白立新谈命运三重奏:《黑神话:悟空》中的人生思考

文 | 头部财经首席评论员白立新 发布 | 头部财经 top168.com 导语:《黑神话:悟空》中三个悟空形象演绎命运三种属性。老者悟空象征确定性,历经沧桑,蕴含世界法则;玩家操作悟空代表能动性,承载玩家意志影响…

seaborn:一个超炫的数据可视化Python库

我是东哥,专注于分享Python技术的自媒体人。今天,我将带你深入了解一个非常有趣的Python库——Seaborn。无论你是刚入门的Python小白,还是希望提升数据可视化技能的技术小白,相信这篇文章都会对你有所帮助。 项目地址&#xff1a…

数学符号-西格玛

西格玛”是希腊字母,也有念作“西玛”“希玛”等各种读法,符号是∑,英文译音是Sigma, 表示数学中的求和号,是数学中常用的符号,主要用于求多项数的和,用∑表示 ∑下面的小字,如i1表示从i1开始求和 上面的小字&#xf…

【网络世界】网络层

目录 🌈前言🌈 📁 网络层 📁 IPV4 📂 什么是IP地址 📂 网段划分 📂 特殊IP 📂 内网和公网 📂 IPV4的危机 📁 IP协议格式 📁 路由 &#x1f…

【工具篇】高效记忆方法之AnKi工具

😊你好,我是南极。正在变强的路上不断地努力着💪 🔔今天和大家分享一些记忆的方法,以及推荐了一款用于复习和巩固知识的软件AnKi。 对我们程序员而言,平常学习的东西会比较多,有时呢学的东西会…

气势向前,豪华向上 全新BMW X3长轴距版全球首发,更大体量、更高价值、更多驾趣

X家族的中流砥柱,豪华中型SAV的引领者现代极简主义,原石切割般的型面,塑造纯粹的BMW X辨识度“以驾驶员为中心”和“以简释繁”,打造“中国专属”的精致豪华空间创新不止,驾趣依旧,探索未知的忠实伙伴 &…

Django+Vue二手交易平台的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者&…

钉钉好用吗?类似钉钉的内部知识库有哪些?

在数字化转型的浪潮中,企业对于高效、便捷的知识管理工具需求日益增长。 在企业管理领域,虽然钉钉作为一款功能全面的企业级即时通讯与协作平台,以其强大的知识管理功能受到了广泛认可,但市场上仍有许多其他优秀的知识管理工具可…

《苍穹外卖》电商实战项目(java)知识点整理(P1~P65)【上】

史上最完整的《苍穹外卖》项目实操笔记,跟视频的每一P对应,全系列10万字,涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳,参考这篇,相信会带给你极大启发。 《苍穹外卖》项目实操笔记【中】:P66~P…

phpstorm远程连接阿里云项目

1.安全组 打开端口3306,22 一、.远程连接mysql 1.1新建一个远程连接的用户(root用户默认不能远程,不用修改) -- 登录到MySQL mysql -u root -p -- 授权远程用户 GRANT ALL PRIVILEGES ON *.* TO 远程用户名% IDENTIFIED BY 远…

ffmpeg视频转切片m3u8并加密videojs播放hls.js播放dplayer播放(弹幕效果)

文章目录 学习链接步骤安装openssl生成一个enc.key文件生成加密串创建enc.keyinfo文件视频切分m3u8文件 web前端查看m3u8视频后台返回enc.key的接口videojs播放m3u8视频 其它videojs切换播放视频hls.js切换播放视频dplayer切换播放视频(弹幕) 学习链接 Java实现视频加密及播放…

redis主从同步

redis 相比于memcached可以永久缓存。 首先停掉mysql源码安装redis 1. 安装redis cd /root/redis-6.2.4 make # 直接make,里面已经配置过了 make install# 安装 cd utils/ ./install_server.sh需要在文件里面注释掉,systemd判断语句 vim install_s…

【GPT】Coze使用开放平台接口-【2】创建工作流-语音伪造检测工作流

在Coze使用开放平台接口-【1】创建插件,我们已经成功创建了开放平台的插件,也创建了对应的工具。本文档就根据创建好的插件,来创建对应的工作流,来让接口能够用起来。 下面直接用现成的插件快商通AI开放平台,来创建语音…

202408830使用python3给BGR3的裸图加上BMP图的文件头

202408830使用python3给BGR3的裸图加上文件头 2024/8/30 20:20 缘起,获取SONY索尼的8530的机芯的4K的BGR3的裸图。可以使用7-yuv打开了。 如果直接可以给这张YUV图加上BMP格式的文件头,就可以直接使用标准的图像处理软件/ACDSee5.0打开了! 这…

RISC-V单片机智能落地扇方案

在众多产品中,智能落地扇产品凭借其出色的性能和质量优势,备受消费者青睐。智能落地扇有着卓越的性能和智能化的操作。 RAMSUN提供的智能落地扇方案主控单片机芯片采用RISC-V微处理器,内置高速存储器,最高工作频率可达144MHz&…

【智能算法改进】多策略融合的改进黑猩猩搜索算法及其应用

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】黑猩猩优化算法(ChOA)原理及实现 2.改进点 改进的 Sine 混沌映射初始化种群 ChoA 种群随机初始化的方法导致种群多样性、均匀性差、容易出现边界聚集现象&#xff0c…

E30.【C语言】练习:sizeof和strlen的习题集(B)

Exercise 4:sizeof 字符串 求下列代码打印结果 #define CRT_NO_WARNINGNESS 1 #include <stdio.h> #include <string.h> int main() {char arr[] "abcdef";printf("%zd\n", sizeof(arr));printf("%zd\n", sizeof(arr 0));printf…