| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> SHAP模型:可解释机器学习模型 -> 正文阅读 |
|
[人工智能]SHAP模型:可解释机器学习模型 |
?小白进阶选手,如果写的内容有什么问题大家一起讨论学习呀 :) 模型介绍首先个人理解SHAP模型是对机器学习模型进行解释的一个模型 ?上面这个图就是一个比较直观的解释 机器学习模型一般都是一个黑盒。比如某个模型要进行一些预测任务,首先对模型输入一些已知条件(Age=65,Sex=F,BP=180,BMI=40),然后模型根据输入进行训练,最终训练完的模型可以对该条件输出预测结果(Output=0.4) 所以这样模型只能得到最终的结果,至于模型内部是怎么计算的,输入的已知条件(Age=65,Sex=F,BP=180,BMI=40)是怎么对预测结果(Output=0.4)影响的,我们都没法知道 而SHAP模型就可以让我们知道这些已知条件到底对最终预测结果起到哪些影响(是对结果起到正向影响还是对结果起到了负向影响),除了SHAP模型,其实也有其他方法可以进行特征重要性的计算,比如下面这个表格里提到的,我们可以根据各种方法的优点选择适合的进行特征重要性计算 而本文主要介绍的SHAP 属于模型事后解释的方法,它的核心思想是计算特征对模型输出的边际贡献,再从全局和局部两个层面对“黑盒模型”进行解释。SHAP构建一个加性的解释模型,所有的特征都视为“贡献者” SHAP的全称是SHapley Additive exPlanation,SHAP是由Shapley value启发的可加性解释模型。而Shapley value起源于合作博弈论,那什么是合作博弈呢。比如说甲乙丙丁四个工人一起打工,甲和乙完成了价值100元的工件,甲、乙、丙完成了价值120元的工件,乙、丙、丁完成了价值150元的工件,甲、丁完成了价值90元的工件,那么该如何公平、合理地分配这四个人的工钱呢?Shapley提出了一个合理的计算方法,我们称每个参与者分配到的数额为Shapley value。 结合文章一开始提到的预测任务,我认为就是已知条件(Age=65,Sex=F,BP=180,BMI=40)一起完成了预测结果(Output=0.4),那么该如何公平、合理地分配这四个已知条件对预测结果的贡献呢?此时SHAP模型就会给这四个已知条件都分配一个Shapley value值,根据这个值我们就可以很好的进行理解 SHAP可以具体解决的任务
这一部分在https://yyqing.me/post/2018/2018-09-25-kaggle-model-insights这个网站里讲的很详细 SHAP库可用的explainers在SHAP中进行模型解释需要先创建一个explainer,SHAP支持很多类型的explainer
实验在网上找了几个相关的实验跑一下加深印象,SHAP模型输出的可视化图真的是挺美观的 ? 感觉要把SHAP运用理解透,首先对于机器学习的一些模型需要运用的比较熟练 网上找的的几个代码都是回归类的问题,所以了解的也比较浅显,以后遇到其他问题也可以尝试用SHAP对模型进行解释看看(网上对SHAP解释深度学习模型的例子不算很多,比如有看到一个CV方向的例子,通过SHAP来解释深度学习模型每一层网络对最终检查结果的影响情况,以后可以尝试一下这个方面),然后不断补充这里的实验部分 问题1:足球运动员身价估计 每个足球运动员在转会市场都有各自的价码,这个问题的目的是根据球员的各项信息和能力值来预测该球员的市场价值。 问题2:波士顿房价估计 通过数据挖掘对影响波士顿房价的因素进行分析 具体代码:https://colab.research.google.com/drive/1V6XUWCbR7cPKXfdCJXKC1LjNHlg0GpFE?usp=sharing SHAP导出各种格式的图注意画图前需要加:
不加就会报错:
如果想要在论文中添加SHAP模型输出的图,只是在代码最后加上plt.savefig,保存下来的图像为空白图。python的shap库,底层仍然使用matplotlib,根据源码可以发现在调用shap.xxx_plot时可以选择传递一个参数就可以正常使用plt.savefig了,几种不同的shap.xxx_plot需要传递的参数可能是不一样的,下面就举几个例子,一般情况下加上matplotlib=True,show?=?False这两个参数的比较多 除了下面几个例子,瀑布图直接调用plt.savefig即可,shap.decision_plot则需要传入参数return_objects=True
References?https://www.jianshu.com/p/324a7c982034 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 18:33:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |