Partial Dependence Plot
Partial Dependence就是用来解释某个特征和目标值y的关系的,一般是通过画出Partial Dependence Plot(PDP)来体现。
PDP是依赖于模型本身的,所以我们需要先训练模型(比如训练一个random forest模型)。假设我们想研究y和特征\(X_1\)的关系,那么PDP就是一个关于\(X_1\)和模型预测值的函数。我们先拟合了一个随机森林模型RF(X),然后用\(X_k^{i}\)表示训练集中第k个样本的第i个特征,那么PDP的函数就是
\]
也就是说PDP在\(X_1\)的值,就是把训练集中第一个变量换成\(X_1\)之后,原模型预测出来的平均值。
根据\(X_1\)的不同取值,\(f(X_1)\)就可以练成折线,这个折线就是Partial Dependence Plot,横轴是\(X_1\),纵轴就是Partial Dependence。
下图就是一个例子
aaarticlea/png;base64,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" alt="img">
自己写代码模拟:
from sklearn.tree import DecisionTreeRegressor
from sklearn.inspection import partial_dependence
from sklearn.datasets import load_boston
import numpy as np
import matplotlib.pyplot as plt
data = load_boston()
X, y = data.data, data.target
dtr = DecisionTreeRegressor()
dtr.fit(X,y)
def my_pdp(model, X, feat_idx):
fmax, fmin = np.max(X[:, feat_idx]), np.min(X[:, feat_idx])
frange = np.linspace(fmin, fmax, 100)
preds = []
for x in frange:
X_ = X.copy()
X_[:, feat_idx] = x
pred = model.predict(X_)
preds.append(np.mean(pred))
return (frange, np.array(preds))
del dtr.classes_
my_data = my_pdp(dtr, X, 0)
sk_data = partial_dependence(dtr, X = X, features = [0], percentiles=[0,1])
plt.subplot(121)
plt.plot(my_data[0], my_data[1])
plt.subplot(122)
plt.plot(sk_data[1][0], sk_data[0][0])
plt.show()
Github python library PDPbox
优点
pdp的计算是直观的:partial dependence function 在某个特定特征值位置表示预测的平均值,如果我们强制所有的数据点都取那个特征值。在我的经验中,lay people(普通人,没有专业知识的大众)通常都可以很快理解PDPs的idea。
如果你要计算的PDP的特征和其它特征没有关联,那么PDP可以完美的展示出这个特征大体上上如何影响预测值的。在不相关的情况下,解释是清晰的:PDP展示了平均预测值在某个特征改变时是如何变化的。如果特征是相互关联的,这会变得更加复杂。
不足
实际分析PDP时的最大特征个数是2。这不是PDP的错误,而是由于我们人无法想象超过三维的空间。
有一些 PDP并不展示特征分布。忽略分布可能会造成误解,因为你可能会过度解读具有少量数据的地方。这个问题通过展示一个rug或者histogram在x轴上的方式很容易解决。
独立性假设是PDP的最大问题,它假设计算的特征和其它特征是不相关的。当特征是相关的时候,我们创造的新的数据点在特征分布的空间中出现的概率是很低的。对这个问题的一个解决方法就是Accumulate Local Effect plots,或者简称ALE plots,它工作在条件分布下而不是边缘分布下。
多种类的影响可能会被隐藏,因为PDP仅仅展示边际影响的平均值。假设对于一个要计算的特征,一半的数据点对预测有正相关性,一半的数据点对预测有负相关性。PD曲线可能会是一个水平的直线,因为两半数据点的影响可能会互相抵消。然后你可能会得出特征对预测没有影响的结论。通过绘制individual conditional expectation curves而不是aggregated line,我们可以揭示出这种heterogeneous effects。
Partial Dependence Plot的更多相关文章
- XAI/MLI 可解释机器学习系列1- 开源&paper汇总
一直在关注可解释机器学习领域,因为确实在工作中有许多应用 模型检查,特征重要性是否符合预期和AUC一样重要 模型解释,比起虚无缥缈的模型指标,解释模型学到的规律更能说服业务方 样本解释,为什么这些用户 ...
- Gradient Boosted Regression Trees 2
Gradient Boosted Regression Trees 2 Regularization GBRT provide three knobs to control overfitting ...
- 集成方法:渐进梯度回归树GBRT(迭代决策树)
http://blog.csdn.net/pipisorry/article/details/60776803 单决策树C4.5由于功能太简单.而且非常easy出现过拟合的现象.于是引申出了很多变种决 ...
- kaggle Partial_Dependence_Plots
# Partial dependence plots# 改变单变量对最终预测结果的影响# 先fit出一种模型,然后取一行,不断改变某一特征,看它对最终结果的印象.# 但是,只使用一行不具有典型性# 所 ...
- 学习小记: Kaggle Learn - Machine Learning Explainability
Method Feature(s) Sample(s) Result Value/Feature Permutation Importance 1 all validation samples Sin ...
- R语言实战(四)回归
本文对应<R语言实战>第8章:回归 回归是一个广义的概念,通指那些用一个或多个预测变量(也称自变量或解释变量)来预测响应变量(也称因变量.效标变量或结果变量)的方法.通常,回归分析可以用来 ...
- XGBoost、LightGBM的详细对比介绍
sklearn集成方法 集成方法的目的是结合一些基于某些算法训练得到的基学习器来改进其泛化能力和鲁棒性(相对单个的基学习器而言)主流的两种做法分别是: bagging 基本思想 独立的训练一些基学习器 ...
- scikit-learn:class and function reference(看看你究竟掌握了多少。。)
http://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition Reference This is t ...
- XGBoost、LightGBM、Catboost总结
sklearn集成方法 bagging 常见变体(按照样本采样方式的不同划分) Pasting:直接从样本集里随机抽取的到训练样本子集 Bagging:自助采样(有放回的抽样)得到训练子集 Rando ...
随机推荐
- how to solve error when start Hyper-V quick create app error
After checked the requirements on Hyper-v by run "systeminfo.exe" in cmd window, then I en ...
- O028、nova-compute 部署 instance 详解
参考https://www.cnblogs.com/CloudMan6/p/5451276.html 本节讨论 nova-compute ,并详细分析 instance 部署的全过程. nov ...
- qt tableview使用
Qt::CheckState checkSibling(QStandardItem * item); void treeItem_checkAllChild(QStandardItem * item, ...
- 用<![CDATA[]]>将xml转义为 纯文本
被<![CDATA[]]>这个标记所包含的内容将表示为纯文本,比如<![CDATA[<]]>表示文本内容"<". 此标记用于xml文档中,我们先 ...
- 上述代码在JavaScript事件处理中
上述代码在JavaScript事件处理中很常见,主要设置为与旧版本的Internet Explorer(主要在IE9之前)兼容,因为旧版本的IE不支持标准的W3C事件处理规范. 此代码中的e表示事件对 ...
- yolo模型的特点与各版本性能对比
目录 一.YOLOV1 二.YOLOV2 二.YOLOV3 正文 目前,基于深度学习的目标检测算法大致可以分为两大流派: 1.两阶段(two-stage)算法:先产生候选区域然后再进行CNN分类(RC ...
- Django的Auth模块
1 Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码 ...
- 1.RPC原理学习
1.什么是RPC:远程过程调用协议 RPC(Remote Procedure Call Protocol)— 远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要 了解底层网络技术的协 ...
- Linux :ssh sftp scp
SSH 概述 1 SSH协议,Secure Shell ,为客户提供安全的shel环境,默认端口22 OpenSSH服务 服务名称:sshd 主程序:/usr/bin/sshd /usr/bin ...
- (转) Oracle性能优化-读懂执行计划
Oracle的执行计划 得到执行计划的方式 Autotrace例子 使用Explain explain plan set STATEMENT_ID='testplan'for select * fro ...