【MATLAB第103期】#源码分享 | 基于MATLAB的LIME可解释性线性分类预测模型,2020b以上版本
一、模型介绍
LIME(Local Interpretable Model-agnostic Explanations)是一种用于解释复杂机器学习模型预测结果的算法。它由Marco Ribeiro、Sameer Singh和Carlos Guestrin在2016年提出,旨在解决机器学习模型,尤其是深度学习模型等“黑盒”模型的可解释性问题。以下是对LIME算法的详细介绍:
1、LIME的背景和动机
随着机器学习模型在各个领域的广泛应用,模型的预测效果虽然越来越受到重视,但模型的可解释性也同样重要。在医疗、金融和司法等领域,模型的决策过程需要透明和可解释,以便人们能够理解模型的预测依据,增加对模型的信任,并在必要时进行干预。
LIME算法的提出正是为了解决这一问题,它提供了一种方法,可以在不改变原有模型结构的前提下,对模型的预测结果进行局部解释。
2、LIME的核心概念
LIME算法的核心在于构建一个局部的、可解释的模型来近似复杂的全局模型。这个局部模型通常是简单的线性模型,因为它的参数少,易于理解和解释。LIME算法的主要特点包括:
局部性(Local):LIME关注单个预测样本周围的局部区域,而不是整个数据集。
可解释性(Interpretable):LIME生成的解释是基于简单的线性模型,易于人类理解。
模型无关性(Model-agnostic):LIME可以用于任何类型的机器学习模型,无论其复杂性如何。
解释(Explanations):LIME提供的是一种事后解释方法,即在模型训练完成后使用。
3、LIME的工作原理
LIME算法的工作原理可以分为以下几个步骤:
样本扰动:对于给定的查询样本,LIME在该样本的邻近区域生成一系列扰动样本。对于连续型特征,可以通过添加高斯噪声来生成;对于分类型特征,则可以通过按照训练数据中的分布进行采样。
扰动样本预测:将这些扰动样本输入到原始的复杂模型中,得到预测结果。
权重计算:根据扰动样本与查询样本的距离,计算每个扰动样本的权重。距离查询样本越近的样本,其权重越大。
局部模型训练:使用加权的扰动样本和对应的预测结果,训练一个简单的局部线性模型。
特征重要性解释:局部线性模型的系数可以直接解释为特征的重要性,从而提供对原始模型预测的解释。
4、LIME的应用场景
LIME算法可以应用于多种数据类型,包括表格数据、图像数据和文本数据。例如:
表格数据:可以使用LIME解释银行客户行为数据对理财产品销售的影响。
图像数据:可以使用LIME解释图像识别模型为何将某张图片分类为特定的类别。
文本数据:可以使用LIME解释文本分类模型为何将某条信息判断为垃圾短信。
5、LIME的优缺点
优点:
通用性强:LIME适用于各种类型的机器学习模型,包括深度学习模型。
可解释性好:通过简单的线性模型提供直观的特征重要性解释。
灵活性高:可以针对单个预测样本进行解释,也可以对整个模型进行全局解释。
缺点:
速度较慢:生成扰动样本并计算权重的过程可能比较耗时。
可能不稳定:由于依赖于扰动样本,LIME的解释可能会受到样本扰动方式的影响。
6、总结
LIME算法为我们提供了一种强大的工具,使得我们可以更好地理解和信任机器学习模型的预测结果。尽管它有一些局限性,但它的模型无关性和可解释性使其成为解释复杂模型的有力工具。随着人工智能领域的不断发展,模型的可解释性将变得越来越重要,LIME算法及其后续的发展值得我们持续关注和研究。
二、代码展示
在上述 MATLAB 代码中,描述了如何使用 LIME(局部可解释模型-不透明模型的解释)来解释一个黑盒模型的预测。下面是对这些代码注释的中文翻译,除了主程序代码以外的部分:
加载 carbig 数据集,其中包含了20世纪70年代和80年代初制造的汽车的测量数据。
load carbig
创建一个表格,包含预测变量 Acceleration、Cylinders 等,以及响应变量 MPG。
tbl = table(Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight,MPG);
从 tbl 中移除缺失值,以减少 fitrkernel 函数训练时的内存消耗并加速训练过程。
tbl = rmmissing(tbl);
通过从 tbl 中移除响应变量来创建预测变量表。
tblX = removevars(tbl,'MPG');
使用 fitrkernel 函数训练一个 MPG 的黑盒模型。
rng('default') % 为了可重复性
mdl = fitrkernel(tblX,tbl.MPG,'CategoricalPredictors',[2 5]);
创建一个 LIME 对象,并指定预测数据集,因为 mdl 不包含预测数据。
results = lime(mdl,tblX)
为 tblX 中的第一个观测值拟合一个线性简单模型,并指定要找到的重要预测变量数量为3。
queryPoint = tblX(1,:)
results = fit(results,queryPoint,3);
使用 LIME 对象的 plot 函数绘制结果。
plot(results)
绘制的图表显示了查询点的两个预测值,分别对应于 results 的 BlackboxFitted 属性和 SimpleModelFitted 属性。水平条形图显示了简单模型的系数值,按其绝对值大小排序。LIME 发现 Horsepower、Model_Year 和 Cylinders 是查询点的重要预测变量。
Model_Year 和 Cylinders 是具有多个类别的分类预测变量。对于线性简单模型,软件为每个分类预测变量创建的数量比类别数少一个的虚拟变量。条形图只显示了最重要的虚拟变量。你可以使用 results 的 SimpleModel 属性来检查其他虚拟变量的系数。显示包括所有分类虚拟变量的排序系数值。
[~,I] = sort(abs(results.SimpleModel.Beta),'descend');
table(results.SimpleModel.ExpandedPredictorNames(I)',results.SimpleModel.Beta(I), ...
'VariableNames',{'Expanded Predictor Name','Coefficient'});
这些注释提供了对代码中每个步骤的详细解释,帮助理解 LIME 是如何在 MATLAB 中被用来解释黑盒模型的预测的。
三、代码获取
1.阅读首页置顶文章
2.关注CSDN
3.根据自动回复消息,回复“103期”以及相应指令,即可获取对应下载方式。