模型解释性:PFI、PDP、ICE等包的用法

news2024/9/23 8:05:20

  本篇主要介绍几种其他较常用的模型解释性方法。

1. Permutation Feature Importance(PFI)

1.1 算法原理

  置换特征重要性(Permutation Feature Importance)的概念很简单,其衡量特征重要性的方法如下:计算特征改变后模型预测误差的增加。如果打乱该特征的值增加了模型的误差,那么一个特征就是重要的;如果打乱之后模型误差不变,那就认为该特征不重要。

1.2 Python实现

  使用Wine酒数据来训练模型。其模型训练代码如下:

import pandas as pd
import numpy as np
from sklearn.datasets import load_wine
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from matplotlib import pyplot as plt
import seaborn as sns

wine=load_wine()
X=pd.DataFrame(wine.data,columns=wine.feature_names)
y=wine.target

rfc=RandomForestClassifier(max_depth=4,random_state=0)
rfc.fit(X,y)
y_pred=rfc.predict(X)

accuracy=accuracy_score(y,y_pred)
1.2.1 sklearn包实现

 &ems;常用的机器学习包sklearn中也集成了这种方法,但是需要单独写代码来实现可视化。其具体代码如下:

from sklearn.inspection import permutation_importance
result=permutation_importance(rfc,X,y,n_repeats=10,random_state=42)

feat=pd.DataFrame(np.hstack(([[col] for col in wine.feature_names],
                            [[item] for item in result['importances_mean']])),
                  columns=['Feat','Imp'])
feat['Imp']=feat['Imp'].astype(float)
feat=feat.sort_values('Imp',ascending=False)
sns.barplot(x='Imp',y='Feat',data=feat)
plt.show()

其结果如下:
在这里插入图片描述

1.2.2 eli5包实现
import eli5
from eli5.sklearn import PermutationImportance
perm=PermutationImportance(rfc,n_iter=10)
perm.fit(X,y)
eli5.show_weights(perm,feature_names=wine.feature_names)

其结果如下:
在这里插入图片描述

1.3 参考资料

  • https://blog.csdn.net/weixin_39653948/article/details/110731460
  • https://blog.csdn.net/qq_41185868/article/details/126046956

2 Partial Dependency Plots(部分依赖图,PDP)

2.1 算法原理

  部分依赖图(PDP)展示了一个或两个特征对机器学习模型预测结果的边际效应。部分依赖图可以显示目标和特征之间的关系是线性的、单调的还是更复杂的关系。PDP假设所有特征两两不相关。其具体步骤如下:

  • 训练一个机器学习模型(假设特征依次为 F 1 … F n , y F_{1} \dots F_{n},y F1Fn,y为目标变量);
  • 假设需要探究特征 F 1 F_{1} F1对目标变量 y y y的边际效应;
  • 特征 F 1 F_{1} F1的取值依次为 ( a 1 , a 2 , … , a n ) (a_{1},a_{2},\dots,a_{n}) (a1,a2,,an); 依次用 a 1 , a 2 , … , a n a_{1},a_{2},\dots,a_{n} a1,a2,,an代替 F 1 F_{1} F1列,其他特征保持不变。利用训练好的模型对这些数据进行预测,计算所有样本的预测平均值。
  • 以特征 F 1 F_{1} F1的不同取值为X轴,其对应的预测样本平均值为Y轴进行作图即可。

2.2 Python实现

2.2.1 安装PDPbox包

  使用如下代码直接安装PDPbox包的时候经常报错。报错的原因在于matplotlib V3.1.1无法正确安装。

pip install PDPbox

在网上查了很多资料也没有解决,所以在相关网站:https://pypi.tuna.tsinghua.edu.cn/simple/pdpbox/ 直接下载了pdpbox的压缩包,解压之后将以下两个文件直接放到python安装路径的lib/site-packages文件夹下即可。
在这里插入图片描述

2.2.2 PDPbox实现
  • 单变量的边际效用
from pdpbox import pdp

pdp_goals=pdp.pdp_isolate(model=rfc,dataset=X,model_features=wine.feature_names,
                          feature=wine.feature_names[0])
pdp.pdp_plot(pdp_goals,wine.feature_names[0])
plt.show()

在这里插入图片描述

  • 交叉特征的边际效用
pdp_goals=pdp.pdp_interact(model=rfc,dataset=X,model_features=wine.feature_names,
                           features=wine.feature_names[3:5])
pdp.pdp_interact_plot(pdp_goals,feature_names=wine.feature_names[3:5])
plt.show()

在这里插入图片描述

2.2.3 sklearn实现

  除了使用专用的PDPbox箱之外,还可以使用sklearn包来实现部分依赖图。具体使用方法如下:

from sklearn.inspection import plot_partial_dependence
plot_partial_dependence(rfc,X,features=wine.feature_names[0:1],
                        feature_names=wine.feature_names,
                        target=0)
plt.show()

plot_partial_dependence(rfc,X,features=wine.feature_names[3:5],
                        feature_names=wine.feature_names,
                        target=0)
plt.show()

其结果如下(这里仅显示第二组结果):
在这里插入图片描述

3 Individual Conditional Expectation(ICE)

3.1 算法原理

  个体条件期望计算方法与PDP类似,它刻画的是每个个体的预测值与单一变量之间的关系,消除了非均匀效应的影响。

3.2 参考资料

  • https://blog.csdn.net/sinat_26917383/article/details/115669705

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

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

相关文章

HCIP-5距离矢量路由协议RIP学习笔记

前言 路由信息协议RIP(Routing Information Protocol)的简称,它是一种基于距离矢量(Distance-Vector)算法的协议,使用跳数作为度量来衡量到达目的网络的距离。RIP主要应用于规模较小的网络中。Rip是第一个动…

如何创建“杀手级”SaaS 产品文档?

SaaS 产品的文档至关重要,尽管在 SaaS 初创公司的旋风中,它可能在您的列表中并不重要。它不仅仅是为客户支持节省成本。您可能已经在发布一些文档时做了一些尝试,但现在是时候将您的文档提升到一个新的水平了。由于 SaaS 公司采用订阅模式运营…

【Git】Git使用(保姆级讲解)

1、第一次安装使用 git下载地址:https://git-scm.com/download 1.1 配置用户名、邮箱 ​ 这是非常重要的,因为每次Git提交都会使用该用户信息。 设置 ​ 在 git bash 输入以下命令。 git config --global user.name "" git config --glo…

CV学习笔记-ResNet

ResNet 文章目录ResNet1. ResNet概述1.1 常见卷积神经网络1.2 ResNet提出背景2. ResNet网络结构2.1 Residual net2.2 残差神经单元2.3 Shortcut2.4 ResNet50网络结构3. 代码实现3.1 Identity Block3.2 Conv Block3.3 ResNet网络定义3.4 整体代码测试1. ResNet概述 1.1 常见卷积…

【三维几何学习】MeshCNN: A Network with an Edge

MeshCNN引言一、方法简述1.1 输入1.2 卷积1.3 池化二、实验分析三、改进以及应用引言 MeshCNN是第一个将网格简化引入到池化操作中的网络:合并顶点降低网格分辨率,类似图像中的平均池化。 主页1:https://ranahanocka.github.io/MeshCNN/ 比较详细的讲解…

Java 练习题:输出纯素数

文章目录纯素数简介任务要求思路解析源码奉上运行效果总结纯素数简介 所谓纯素数就是该数本身不仅是素数,并且该数的每一位都是素数。 例如:23,37是纯素数,但13,29不是。 任务要求 输出55555内所有的纯素数,按每行20个的格式化…

JVM 学习(2)—简单理解Java 四大引用(强、软、弱、虚)

一、Java 引用概述 Java 中出现四种引用是为了更加灵活地管理对象的生命周期,以便在不同场景下灵活地处理对象的回收问题。不同类型的引用在垃圾回收时的处理方式不同,可以用来实现不同的垃圾回收策略。Java 目前将其分成四类,类图如下&…

彻底搞懂inner join,left join,right join

1.inner join A inner join B where 条件, 对于A表中的每一行都会去B表的所有行去查找,去匹配,符合条件的就将这两行连接起来 下面用一个例子来帮助实际理解这句话: 创建下面两个表,customers表orders表 输入以下s…

银行软件测试面试题目总结,希望可以帮到你

目录 一、根据题目要求写出具体LINUX操作命令 二、JMETER题目 三、根据题目要求写出具体SQL语句 总结感谢每一个认真阅读我文章的人!!! 重点:配套学习资料和视频教学 一、根据题目要求写出具体LINUX操作命令 1、分别写出一种…

HTML标签——列表标签 之 自定义列表

HTML标签——列表标签 之 自定义列表 目录HTML标签——列表标签 之 自定义列表一、 场景:在网页的底部导航中通常会使用自定义列表实现。二、标签组成:三、案例实操四、运行效果五、显示特点:六、注意点:七、小结一、 场景&#x…

DeepPath: A Reinforcement Learning Method forKnowledge Graph Reasoning

Innovation使用RL学习KG中的关系路径推理使用Supervised Policy Learning解决:KG中关系图大,如试错训练RL,难以收敛使用双向路径搜索,减少中间节点数量IntroductionPRA是一种学习推理路径的方法,使用基于RandomWalk的重…

智能语音信息处理团队18篇论文被语音技术顶会ICASSP 2023接收

近日,ICASSP 2023会议发出了审稿结果通知,语音及语言信息处理国家工程研究中心智能语音信息处理团队共18篇论文被会议接收,论文方向涵盖语音识别、语音合成、话者识别、语音增强、情感识别、声音事件检测等,各接收论文简介见后文。…

FreeRTOS入门(05):事件组

文章目录目的基础说明相关函数使用演示总结目的 事件组是RTOS中相对常用的用于任务间交互的功能,这篇文章将对相关内容做个介绍。 本文代码测试环境见前面的文章:《FreeRTOS入门(01):基础说明与使用演示》 基础说明…

华为OD机试模拟题 用 C++ 实现 - 寻找连续区间(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明寻找连续区间题目输入输出示例一输入输出说明示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率…

嵌入式环境配置—VMware 软件安装和虚拟机的创建

目录 一、VMware软件的安装 二、虚拟机的创建 三、Linux操作系统的安装 VMware软件的安装 为什么要虚拟机? 嵌入式Linux开发需要在Linux系统下进行,我们选择了Ubuntu。 1.双系统安装 有问题,一次只能使用一个系统。Ubuntu基本只做编译用。需求&…

Qt之QTableView自定义排序/过滤(QSortFilterProxyModel实现,含源码+注释)

一、效果示例图 1.1 自定义表格排序示例图 本文过滤条件为行索引取余2等于0时返回true,且从下图中可以看到,奇偶行是各自挨在一起的。 1.2 自定义表格过滤示例图 下图添加两列条件(当前数据大于当前列条件才返回true,且多个列…

美团前端常见vue面试题(必备)

v-model 是如何实现的&#xff0c;语法糖实际是什么&#xff1f; &#xff08;1&#xff09;作用在表单元素上 动态绑定了 input 的 value 指向了 messgae 变量&#xff0c;并且在触发 input 事件的时候去动态把 message设置为目标值&#xff1a; <input v-model"sth…

Java程序设计基础学习笔记——类与对象、方法、递归、重载、可变参数、作用域、构造器、this

以下笔记整理自B站UP主韩顺平【零基础 快速学Java】韩顺平 零基础30天学会Java课程OOP面向对象程序设计(Object Oriented Programming)类就是数据类型&#xff0c;有属性和行为&#xff1b;对象是一个具体的实例从类到对象&#xff0c;目前有几种说法&#xff1a;创建一个对象实…

【网络安全入门】零基础小白必看!!!

看到很多小伙伴都想学习 网络安全 &#xff0c;让自己掌握更多的 技能&#xff0c;但是学习兴趣有了&#xff0c;却发现自己不知道哪里有 学习资源◇瞬间兴致全无&#xff01;◇ &#x1f604;在线找人要资料太卑微&#xff0c;自己上网下载又发现要收费0 &#x1f643;差点当…

HttpRunnerManager部署

基于HttpRunner的接口自动化测试平台: HttpRunner, djcelery and Django_. HttpRunner手册: http://cn.httprunner.org/git地址&#xff1a;httprunner/HttpRunnerManager: 基于 HttpRunner 的 Web 测试平台&#xff0c;已停止维护。 (github.com)部署机器&#xff1a;linux部署…