本部分是来自大纲 模型可解释的一个子分支。

部分依赖图可以表示1个或者2个特征对模型的预测结果所能产生的边际效应。同时也能展示1个特征和label直接是否具有:线性相关性、单调性等。

当我们把pdp应用在线性回归上的时候,通过pdp,我们能够计算每个特征与label之间的线性相关性,其公式表述为

\[\hat f_S(x_s)=E_{X_C}=[\hat f(x_s, X_C)]\int \hat f(x_S, X_C)dP(X_C)
\]

当然pdp也可以适用与分类,只要把输出改成概率就行了,本质上,和回归任务没有太大的区别,对于多分类,可以用 one VS Rest的策略。

其中,\(x_s\)是我们本次关心的1到2个特征,而\(X_C\)则是其他剩余输入模型的特征,\(\hat f\)是本次的模型。通过不断改变\(x_s\)的取值,来看模型预测结果的变化,这时候通过pdp能得到一个特征是怎样影响模型预测的。总结一下:特征重要性展示的是哪些变量对预测的影响最大,而部分依赖图展示的是特征如何影响模型预测的

可以用部分依赖图回答一些与下面这些类似的问题:

  • 假如保持其它所有的特征不变,经纬度对房价有什么影响?换句话说,相同大小的房子,在不同的地方价格会有什么差别?
  • 在两组不同的人群上,模型预测出的健康水平差异是由他们的负债水平引起的,还是另有原因?

上面,度量特征变化所带来的影响的微分函数也可以表示为模型输出的均值:

\[\hat f_S(x_s)=\frac{1}{n}\sum_{i=1}^{N} \hat f(x_S, x_{C}^{i})
\]

具体操作就是:先固定住其他特征,把你感兴趣的这个特征全部批量的改成某个值,不断从某个低值改到某个高值,看所有样本预测结果会做什么变化。

所以说,部分依赖图其实是一种“全局解释模型的方法”

pdp有一个前提假设是,你分析的特征和其余的固定特征没有任何的相关性。如果不能满足这个假设的话,解释的结果可能会存在无法理解的地方。

对于离散值的pdp

对于连续值,我们每次只做微小的改动,对于离散值,这个改动幅度换成“离散特征的取值”就ok。

因为pdp可以同时看一个或者2个特征,所以分两种情况。

1d特征依赖图

我们以泰坦尼克数据集为例子,单独查看'Fair'这个特征,表示乘客登船所需花费的费用。大概可以看到,随着你登船的价格变高,你生还的概率也随之变大。



阴影部分表示95%置信度,x轴方块是一些特征的分段,以及每个分段上人数的占比,头部方块是分位数。

2d特征依赖图

除了看一个特征之外,我们也可以同时看年龄和上船费用两个特征在pdp下是如何交互的。



在这上面你可以看到,年龄越大,且上船费用越高的人,他活下来的概率最大。

pdp的有点

  • 直观,容易理解
  • 可以从因果推理的角度去解释pdp,我们每改变一次特征取值,相当于对pdp进行了一次“treatment”的操作。

pdp的缺点

  • 分析特征受限:每次只能分析1个或者2个,不能再多了
  • 强假设,如果特征之间具有相关性,则结果往往会出乎你的意料: 比如你有2个特征,身高和体重,以及label:步行的速度。我们想看体重是如何影响步行速度的。那么在pdp的时候,我们相当于在原有的模型学习到的样本空间下,新增了一些样本点,分析结果就有可能得出 在身高2米的时候,体重为30,步行速度xxx,事实上,2米的身高不太可能出现30kg的体重,这很难解释清楚。
  • 容易忽略异质条件的影响:举个case,假设你选的这个特征,有一半样本与预测正相关——特征值越大预测越大,—而同时呢,另一半负相关——特征值越小预测越大。这个时候,因为pdp是输出的模型预测值的均值,所以有可能导致这两部分样本相互抵消了,也就是,当你的特征变低的时候,一半样本输出低概率,一半输出高概率,两边加起来求个avg之后,抵消了.....凸(艹皿艹 )

    最终你会得出:“这特征没对模型啥用”的结论。这个问题会放在局部模型可解释中的ICE部分再描述怎么解

全局模型可解释之部分依赖图:Partial Dependence Plot的更多相关文章

  1. Partial Dependence Plot

    Partial Dependence就是用来解释某个特征和目标值y的关系的,一般是通过画出Partial Dependence Plot(PDP)来体现. PDP是依赖于模型本身的,所以我们需要先训练 ...

  2. OSI七层模型具体解释

    OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最基本的功能就是帮助不同类型的主机实现传输数据 . 完毕中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...

  3. TensorFlow的序列模型代码解释(RNN、LSTM)---笔记(16)

    1.学习单步的RNN:RNNCell.BasicRNNCell.BasicLSTMCell.LSTMCell.GRUCell (1)RNNCell 如果要学习TensorFlow中的RNN,第一站应该 ...

  4. 【MapReduce】经常使用计算模型具体解释

    前一阵子參加炼数成金的MapReduce培训,培训中的作业样例比較有代表性,用于解释问题再好只是了. 有一本国外的有关MR的教材,比較有用.点此下载. 一.MapReduce应用场景 MR能解决什么问 ...

  5. Bow模型(解释的很好)

    Bag-of-words model (BoW model) 最早出现在NLP和IR领域. 该模型忽略掉文本的语法和语序, 用一组无序的单词(words)来表达一段文字或一个文档. 近年来, BoW模 ...

  6. Extjs4.10Model模型具体解释

    一.创建Model模型 Extjs4.10提供了两种方法来创建Model模型,也就是创建类 方法一: Ext.define('person',{              extend:'Ext.da ...

  7. SI9000常用共面阻抗模型的解释

    所谓的“共面”,即阻抗线和参考层在同一平面,即阻抗线被VCC/GND所包围, 周围的VCC/GND即为参考层. 相较于单端和差分阻抗模型,共面阻抗模型多了一个参数D1,即阻抗线和参 考层VCC/GND ...

  8. Asp.Net Core 全局模型验证

    public class ActionFilter : IActionFilter { /// <summary> /// action 执行之前 /// </summary> ...

  9. caffe模型参数解释

    作者:wjmishuai 出处: http://blog.csdn.net/wjmishuai/article/details/50890214 原始数据是28*28 1:数据层: layer { n ...

  10. apacheserver全局配置具体解释

    server标识相关指令: ServerName ServerAdmin ServerSignature ServerTokens UseCanonicalName UseCanonicalPhysi ...

随机推荐

  1. 关闭mysql上锁的表/数据

    一.输入查询语句,查看是否有数据被上锁 select * from information_schema.innodb_trx; 取 trx_mysql_thread_id 字段值 kill < ...

  2. C++ //vector 容器构造 vector赋值操作 vector 容量大小 vector插入和删除 //vector数据存取 vector互换容器 vector预留空间

    1 //vector 容器构造 vector赋值操作 vector 容量大小 vector插入和删除 2 //vector数据存取 vector互换容器 vector预留空间 3 #include&l ...

  3. 7、mysql的缓存优化

    概述 开启Mysql的查询缓存,当执行完全相同的SQL语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存. 操作流程 客户端发送一条查询给服务 ...

  4. 子序列&子串

    子序列:子序列就是在原来序列中找出一部分组成的序列 子序列不一定连续 子串:字符串中任意个连续的字符组成的子序列称为该串的子串 子串一定连续

  5. 内存缓存 Gcache VS Caffeine源码详解

    转一篇.后续再尝试自己实践一下

  6. RocketMQ为什么这么快?我从源码中扒出了10大原因!

    大家好,我是三友~~ RocketMQ作为阿里开源的消息中间件,深受广大开发者的喜爱 而这其中一个很重要原因就是,它处理消息和拉取消息的速度非常快 那么,问题来了,RocketMQ为什么这么快呢? 接 ...

  7. DuiLib 一个window的皮肤库 C++ 项目,打包小,比较纯正主流的大制作

    https://github.com/duilib/duilib 从 火柴 那个软件 发现的这个库

  8. SpringMVC异常之The request sent by the client was syntactically incorrect解决方案

    最近在做SpringMVC开发的时候,直接访问后台的controller,出现如下异常 这个问题是什么原因造成的呢? 后来经过测试发现,是表单提交的内容数据类型与实体的(也就是数据表字段)的数据类型不 ...

  9. leetcode数据库sql之Rising Temperature

    leetcode原文引用: Given a Weather table, write a SQL query to find all dates' Ids with higher temperatur ...

  10. 像使用stl一样使用线段树 ——AtCoder Library(转载https://zhuanlan.zhihu.com/p/459579152)

    地址:https://zhuanlan.zhihu.com/p/459579152 我这里翻译一下官方的文档. 首先需要满足几个性质. (注意 ∗ 是个操作,不是单纯的一个乘号) 1)操作满足结合律 ...