机器学习模型可解释性的结果分析

模型的可解释性是机器学习领域的一个重要分支,随着 AI 应用范围的不断扩大,人们越来越不满足于模型的黑盒特性,与此同时,金融、自动驾驶等领域的法律法规也对模型的可解释性提出了更高的要求,在可解释 AI 一文中我们已经了解到模型可解释性发展的相关背景以及目前较为成熟的技术方法,本文通过一个具体实例来了解下在 MATLAB 中是如何使用这些方法的,以及在得到解释的数据之后我们该如何理解分析结果。

要分析的机器学习模型

图片

我们以一个经典的人体姿态识别为例,该模型的目标是通过训练来从传感器数据中检测人体活动。传感器数据包括三轴加速计和三轴陀螺仪共6组数据,我们可以通过手机或其他设备收集,训练的目的是识别出人体目前是走路、站立、坐、躺等六种姿态中的哪一种。我们将收集到的数据做进一步统计分析,如求均值和标准差等,最终获得18组数据,即18个特征。然后可以在 MATLAB 中使用分类学习器 App 或者通过编程的形式进行训练,训练得到的模型混淆矩阵如下,可以看到对于某些姿态的识别,模型会存在一定误差。那么接下来我们就通过一系列模型可解释性的方法去尝试解读一下错误判别的来源。

从混淆矩阵中可以看到,模型对于躺 ‘Laying’ 的姿态识别率为 100%,而对于正常走路和上下楼这三种 ‘Walking’ 的姿态识别准确率较低,尤其是上楼和下楼均低于70%。这也符合我们的预期,因为躺的姿态和其他差别较大,而几种走路之间差异较小。

但我们也留意到模型在 ‘Sitting’ 和 ‘Standing’ 之间也产生了较大的误差,考虑到这两者之间的差异,我们想探究一下产生这种分类错误背后的原因。首先我们从图中所示的区域选择了一个样本点 query point,该样本的正确姿态为 ‘Sitting’,但是模型识别成了 ‘Standing’,为便于下一步分析,这里将该样本点所有特征及其取值列举了出来,如前所述一共 18 个,分别对应于原始的6个传感器数据的平均值、标准差以及第一主成分:

图片

使用可解释性方法进行分析

模型可解释性分析的目的在于尝试对机器学习黑盒模型的预测结果给出一个合理的解释,定性地反映出输入数据的各个特征和预测结果之间的关系。对于预测正确的结果,我们可以判断预测过程是否符合我们基于领域知识对该问题的理解,是否有一些偶然因素导致结果碰巧正确,从而保证了模型可以在大规模生产环境下做进一步应用,也可以满足一些法规的要求。

而对于错误的结果,如上文中的姿态识别,我们可以通过可解释性来分析错误结果是由哪些因素导致的,更具体地说,即上述 18 个特征对结果的影响。在此基础上,可以更有针对性地进行特征选择、参数优化等模型改进工作。

接下来我们就尝试用几种不同的可解释性方法来对上文中的 query point 做进一步分析,希望可以找到一些模型分类错误的线索。

2.1 Shapley 值

我们尝试的第一个方法是 Shapley 值,Shapley 值起源于合作博弈理论,它基于严格的理论分析并给出了完整的解释。作为一个局部解释方法,Shapley 值通过对所有可能的特征组合依次计算,从而得到每个特征对预测结果的平均边际贡献,并且这些值是相对于该分类的平均得分而言的。可以简单理解为边际贡献的分值越高,对产生当前预测结果的影响越大。因为有着完善的理论基础且发展时间较长,Shapley 值被广泛应用于金融领域来满足一些法律法规的要求。

我们之前已经了解到 Shapley 值反应的是每个特征的平均边际贡献,并且这些值是相对于该分类的平均得分而言的。首先需要计算出 ‘Standing’ 的平均得分,我们会将数据集中所有点关于 ‘Standing’ 的预测得分取平均得到相应的值,即 0.17577。而我们关注的样本点预测为 ‘Standing’ 的得分为 1,相对较高,它和所有点的平均值相比差值为 0.82423,Shapley 值反应的正是该样本点中每个特征对这个差值的贡献,其总和也正是 0.82423。

图中显示了排行前十的特征及对应的 Shapley 值,我们可以看到 rowmean_body_gyro_z 的值最大,说明它对错误判别的影响最大,当然紧随其后的几个特征的 Shapley 值也较为接近。

特征 rowmean_body_gyro_z的实际含义为z方向陀螺仪的平均值,为什么这个特征可能导致了错误的结果?我们可以接着往下分析。

2.2 PDP - Partial Dependency Plot

Shapley 值虽然很清晰地给出了各个特征对于最终预测结果的贡献,但是我们需要更多的信息来分析错误产生的来源,一个有效的方法是结合 PDP 又称部分依赖图来进行查看。

PDP 是一个全局解释方法,关注单个特征对某一预测结果的整体影响,其思想是假设所有样本中的该特征等于某一个固定值,从而计算出一个预测结果的平均值。当我们将该特征取一系列值时(取值范围仍然来源于样本),便可以绘制出对应的曲线。我们接着 Shapley 值的分析选择特征 rowmean_body_gyro_z(对应数据中的位置为第6个特征),以及 query point 对应的真实分类 ‘Sitting’ 和错误分类 ‘Standing’ 分别绘制 PDP,在 MATLAB 中使用的方法仍然非常简单,具体代码及对应结果如下:

plotPartialDependence(model,6,'Sitting');

% rowmean_body_gyro_z is the 6th predictor in our data table

图片

plotPartialDependence(model,6,'Standing');

图片

根据上图以及第 1 节中 query point 在该特征的实际取值 0.017 可以看出,当该特征的取值接近于 0 时,分类为 ‘Standing’ 的分数较高,而当取值向两端靠拢尤其是接近于 -0.5 时分类为 ‘sitting’ 的分数较高,甚至大于 0.5,这也符合该点的实际预测值。

图片

通过部分依赖图我们对 Shapley 值的分析结果有了更清楚的认识,虽然该样本点的预测结果是错误的,但结合原始数据可以看出,这样的结果是有迹可循且合理的。

在讨论下一步工作之前,我们再尝试一个新的可解释性方法。

2.3 LIME - Local Interpretable Model-Agnostic Explanations

除了 Shapley 值,LIME 是另外一个应用广泛的局部解释方法,其简单易理解,基本思想是针对关注的样本点,在附近范围内生成扰动数据并用黑盒模型获得对应的预测结果,然后使用这些数据训练出一个局部近似的可解释模型,通过该模型帮助分析原始机器学习模型的预测过程。MATLAB 中可以使用线性模型与决策树模型作为局部的可解释模型。

值得一提的是,由于近似模型的训练使用随机生成的扰动数据,模型的预测结果以及特征排序也会出现一定的随机性。我们仍然考虑上文中姿态识别模型的 query point,使用线性模型对该点做近似分析,具体代码及结果如下:

limeObj = lime(model, humanActivityData, 'QueryPoint',queryPt,'NumImportantPredictors',6);

f = plot(limeObj);

图片

由于是线性模型,预测结果只是简单地给出是否为 ‘Standing’,而横坐标反映的是线性模型中每个特征对应的系数。一个有趣的现象是简单模型的预测结果与黑盒模型的预测结果并不相同,这是否意味着这样的结果是无效的、甚至是错误的?

我们先来选择 rowstd_total_accd_z 与 towmean_total_acc_x,即系数正值和负值中绝对值最大的两个特征(对应在数据中的位置为 9 和 1),采用上文中介绍的方法分别绘制 PDP,我们将 ‘Sitting’ 和 ‘Standing’ 两个类别的曲线绘制在一张图中,结果如下:

plotPartialDependence(model,9,{'Sitting','Standing'}, humanActivityDataTest)

图片

plotPartialDependence(model,1,{'Sitting','Standing'}, humanActivityDataTest);

图片

这两个特征分别代表 z 方向加速度的标准差与 x 方向加速度的均值,结合第 1 节中其在该样本点的实际取值 rowstd_total_acc_z=0.0048 以及 rowmean_total_acc_x=1.0129 可以看出,1.0129 对于模型做出正确预测会起到十分积极的作用,这可能也是简单模型能够做出不是 ‘Standing’ 的原因,因为站立的姿态通常不会在 x 方向产生较大的加速度,与此同时简单模型的 rowstd_total_acc_z 的系数虽然很大,但是取值较小,这意味着z方向加速度标准差较小,数据比较集中,从 PDP 中也能看出在该点对于 ‘Standing’ 和 ‘Sitting’ 的区分度并不高,要在数值增大之后才会对结果有较为显著的影响。

需要说明的是,通过 LIME 得到的特征排序(或系数大小)和 Shapley 值得到的结果相差较大,部分原因是在 LIME 中基于随机扰动生成的数据得到的模型和黑盒模型原本就存在一定差异,可以尝试使用不同的随机数或使用其他简单模型来得到多样化的结果进行对比分析。

回到刚才的问题,这样的简单模型是否是无效的?其实机器学习的模型预测本身是一个十分复杂的过程,这是与黑盒模型强大的功能分不开的,无论是哪种解释方法,目的都是帮助我们窥探预测的机理,从某一个角度理解分析产生这样结果的原因,这些不同的角度相结合可以让我们逐渐接近一个更加全面的分析结果,因此都是有意义的。

后续工作

获得模型的解释结果只是第一步,在得到以上分析结果之后我们接下来可以做些什么呢?

现在我们已经知道 rowmean_body_gyro_z, rowstd_total_acc_z 等几个特征对错误的分类结果有较大影响,我们可以进一步从原始数据分析更深层次的原因,比如我们采集的这个样本点的数据是否有误差?如果原始数据没问题,那么求平均值或标准差的特征提取方式是否合适?是否应该选择更加复杂的统计方式获取特征?在模型的训练阶段是否可以通过修改代价函数等手段提高预测准确率?

显然通过对一个样本的分析,就得出关于整个模型的结论是不严谨的。以上分析结果提供给了我们一些思路和线索,我们可以对更多样本点做类似分析,再结合其他手段去做下一步的改进。

采用类似的方法,我们还可以对判断正确的样本进行可解释性的分析,来和我们对该问题的先验知识进行对比,从而验证模型是否正确。

   免费分享一些我整理的人工智能学习资料给大家,整理了很久,非常全面。包括一些人工智能基础入门视频+AI常用框架实战视频、图像识别、OpenCV、NLP、YOLO、机器学习、pytorch、计算机视觉、深度学习与神经网络等视频、课件源码、国内外知名精华资源、AI热门论文等。

下面是部分截图,加我免费领取

目录

一、人工智能免费视频课程和项目

二、人工智能必读书籍

最后,我想说的是,自学人工智能并不是一件难事。只要我们有一个正确的学习方法和学习态度,并且坚持不懈地学习下去,就一定能够掌握这个领域的知识和技术。让我们一起抓住机遇,迎接未来!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以点击链接领取 

二维码详情

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux开发工具——gdb篇

Linux下调试工具——gdb 文章目录 makefile自动化构建工具 gdb背景 gdb的使用 常用命令 总结 前言: 编写代码我们使用vim,编译代码我们使用gcc/g,但是我们,不能保证代码没问题,所以调试是必不可少的。与gcc/vim一样&…

Python中使用SQLite数据库的方法2-2

3.3.2 创建表单及字段 通过“3.2 创建Cursor类的对象”中创建的Cursor类的对象cur创建表单及字段,代码如图5所示。 图5 创建表单及字段 从图5中可以看出,通过Cursor类的对象cur调用了Cursor类的execute()方法来执行SQL语句。该方法的参数即为要指定的S…

在电商行业中,如何采集电商数据使用数据分析提高业务绩效

数据分析丨知识点丨电商数据采集 福利指路:文章底部领取《数据分析全家桶》 随着电子商务的不断发展,越来越多的企业开始使用数据分析来提高业务绩效。数据分析可以帮助电商企业更好地理解市场和客户,以制定更有针对性的营销策略和产品方案。…

ksuser.dll文件缺失怎么办?软件或游戏无法启动,一键自动修复

很多小伙伴反馈,自己的电脑中了病毒,被杀毒软件清理后,在打开游戏或软件的时候,经常会报错“提示无法找到ksuser.dll文件,建议重新安装软件或游戏”。自己根据提示重装后,还是报错,不知道应该怎…

两向量叉乘值为对应平行四边形面积--公式推导

两向量叉乘值为对应平行四边形面积--公式推导 介绍 介绍

[电磁学]大学物理陈秉乾老师课程笔记

主页有博主其他上万字的精品笔记,都在不断完善ing~ 第一讲 绪论,库仑定律 主要讲解了电磁学中的库伦定律和电场的相关概念,介绍了电荷和电磁相互作用的规律,并讲解了电场强度和电势的概念。 03:14 🎓 库伦定律:电势能与电荷的关…

【JAVA核心知识】分布式事务框架Seata

Seata 基本信息 GitHub:https://github.com/seata/seatastars: 20.6k 最新版本: v1.6.1 Dec 22, 2022 官方文档:http://seata.io/zh-cn/index.html 注意 官方仅仅支持同步调用。 官方在FAQ中表示对于异步框架需要自行支持。 具体的扩展思…

【Maven】<scope>provided</scope>

在Maven中,“provided”是一个常用的依赖范围,它表示某个依赖项在编译和测试阶段是必需的,但在运行时则由外部环境提供,不需要包含在最终的项目包中。下面是对Maven scope “provided”的详细解释: 编译和测试阶段可用…

关于2024年度PMI认证考试计划的通知

尊敬的考生: 经PMI和中国国际人才交流基金会研究决定,2024年度中国大陆地区计划举办四次PMI认证考试,3月、6月、8月、11月各举办一次,具体考试日期另行公布。如遇特殊情况需变更考试计划的,将提前另行通知。 PMI&#…

Ubuntu安装K8S(1.28版本,基于containrd)

原文网址:Ubuntu安装K8S(1.28版本,基于containrd)-CSDN博客 简介 本文介绍Ubuntu安装K8S的方法。 官网文档:这里 1.安装K8S 1.让apt支持SSL传输 sudo apt-get update sudo apt-get -y install apt-transport-https ca-certi…

超声波清洗机实测!北柏、希亦、洁盟超声波清洗机哪款清洁强?

眼镜清洗其实是一件非常重要的事情,一定不要忽视,表面看眼镜已经清洗干净了,实际眼镜缝隙中的杂污渍还没清洁到位,时间一长就会非常容易滋生细菌以及长螨虫!为了杜绝这种情况发生,大家务必重视起清洗眼镜&a…

SpringBoot2.7.12整合Knife4j

SpringBoot2.7.12整合Knife4j 是什么 Knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案 添加依赖 <!--引入Knife4j的官方start包,该指南选择Spring Boot版本<3.0,开发者需要注意--> <dependency><groupId>com.github.xiaoymin</groupId>&l…

Zookeeper-Zookeeper特性与节点数据类型详解

1.Zookeeper介绍 ZooKeeper 是一个开源的分布式协调框架&#xff0c;是Apache Hadoop 的一个子项目&#xff0c;主要用来解决分布式集群中应用系统的一致性问题。Zookeeper 的设计目标是将那些复杂目容易出错的分布式一致性服务封装起来&#xff0c;构成一高效可靠的原语集&…

如何本地搭建FastDFS文件服务器并实现远程访问【内网穿透】

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

交换两个数字的三种方法-LeetCode做题总结 344

344. 反转字符串 题解Java知识点交换两个数字的三种方法1、temp2、异或3、 题解 class Solution {public void reverseString(char[] s) {char temp;for(int i0,js.length-1; i<j; i,j--) {temp s[i];s[i] s[j];s[j] temp;}} }Java知识点 交换两个数字的三种方法 1、t…

Flutter BottomSheet 拖动分两段展示

第一段 第二段 实现思路 通过 GestureDetector 的 Drag 方法&#xff0c;动态改变Dialog的高度&#xff0c;通过设置一个最大高度和最小高度分成两层进行展示 实现 常用的展示BottomSheet的方法为 showModalBottomSheet /// 设置最高最好以高度的比例进行设置&#xff0c;方…

3、Git分支操作与团队协作

Git分支操作 1.什么是分支2. 分支的好处3. 分支的操作3.1 查看分支3.2 创建分支3.3 切换分支3.4 修改分支3.5 合并分支3.6 产生和解决冲突 4. 创建分支和切换分支图解5. Git团队协作机制团队内协作跨团队协作 均在git bash中进行操作。事先建好本地工作库 1.什么是分支 在版本…

使用Robot Framework实现多平台自动化测试

基于Robot Framework、Jenkins、Appium、Selenium、Requests、AutoIt等开源框架和技术&#xff0c;成功打造了通用自动化测试持续集成管理平台&#xff08;以下简称“平台”&#xff09;&#xff0c;显著提高了测试质量和测试用例的执行效率。 01、设计目标 平台通用且支持不同…

3D展2D数学原理

今年早些时候&#xff0c;我为 MAKE 杂志写了一篇教程&#xff0c;介绍如何制作视频游戏角色的毛绒动物。 该技术采用给定的角色 3D 模型及其纹理&#xff0c;并以编程方式生成缝纫图案。 虽然我已经编写了一般摘要并将源代码上传到 GitHub&#xff0c;但我在这里编写了对使这一…

【强化学习】基于蒙特卡洛MC与时序差分TD的简易21点游戏应用

1. 本文将强化学习方法&#xff08;MC、Sarsa、Q learning&#xff09;应用于“S21点的简单纸牌游戏”。 类似于Sutton和Barto的21点游戏示例&#xff0c;但请注意&#xff0c;纸牌游戏的规则是不同且非标准的。 2. 为方便描述&#xff0c;过程使用代码截图&#xff0c;文末附链…
最新文章