机器学习模型可解释性进行到底 ——PDP&ICE图(三)
文章目录
- 1 部分依赖图(Partial Dependence Plot)
- 2 个体条件期望图(Individual Conditional Expectation Plot)
- 3 sklearn 0.24+实现:PDP&ICE图
1 部分依赖图(Partial Dependence Plot)
1.1 理论解读
部分依赖图简称PDP图,能够展现出一个或两个特征变量对模型预测结果影响的函数关系:近似线性关系、单调关系或者更复杂的关系。
单一变量PDP图的具体实施步骤如下:
- 挑选一个我们感兴趣的特征变量,并定义搜索网格;
- 将搜索网格中的每一个数值代入上述PDP函数中的X_s,使用黑箱模型进行预测,并将得到的预测值取平均;
- 画出特征变量的不同取值与预测值之间的关系,该图即为部分依赖图。
以比特币数据集为例,我们使用PDP方法对Xgboost模型结果进行解析。下图刻画的是单变量“区块大小”与比特币价格之间的函数关系。这是一个典型的非线性关系:当“区块大小”在12000-15000范围内增长时,比特币价格逐渐上涨;随着“区块大小”的进一步增长,会对比特币价格产生负向影响,直到区块大小高于20000时,又会对比特币价格产生正向影响。
PDP图的优点在于易实施,缺点在于不能反映特征变量本身的分布情况,且拥有苛刻的假设条件——变量之间严格独立。若变量之间存在相关关系,会导致计算过程中产生过多的无效样本,估计出的值比实际偏高。另一个缺点是样本整体的非均匀效应(Heterogeneous effect):PDP只能反映特征变量的平均水平,忽视了数据异质对结果产生的影响。
1.2 如何根据PDP 进行特征筛选
特征选择:
- 当某个特征的PDP曲线几乎水平或者无规律抖动的时候, 这个特征可能是无用的特征.
- 当某个特征的PDP曲线非常陡峭的时候, 说明这个特征的贡献度是比较大的.
2 个体条件期望图(Individual Conditional Expectation Plot)
个体条件期望图(ICE Plot)计算方法与PDP类似,它刻画的是每个个体的预测值与单一变量之间的关系。个体条件期望图消除了非均匀效应的影响,它的原理和实现方法如下:对某一个体,保持其他变量不变,随机置换我们选定的特征变量的取值,放入黑箱模型输出预测结果,最后绘制出针对这个个体的单一特征变量与预测值之间的关系图。
继续以上述比特币数据为例,下图反映的是“区块大小”对比特币价格影响的ICE图,其中浅蓝色线反映的是每个个体的条件期望图,深蓝色线反映所有个体的平均水平。从图中可看出所有个体并不一定遵循相同的变化趋势,因此相较于PDP的一概而论,ICE图能够更准确地反映特征变量与目标之间的关系。
ICE图的优点在于易于理解,能够避免数据异质的问题。在ICE图提出之后,人们又提出了衍生ICE图,能够进一步检测变量之间的交互关系并在ICE图中反映出来。
ICE图的缺点在于只能反映单一特征变量与目标之间的关系,仍然受制于变量独立假设的要求,同时ICE图像往往由于个体过多导致图像看起来过于冗杂,不容易获取解释信息。
3 sklearn 0.24+实现:PDP&ICE图
sklearn 0.24版本有更新两个图的画法,可参考:Partial Dependence and Individual Conditional Expectation Plots
3.1 部分依赖图(Partial Dependence Plot)
print('Computing partial dependence plots...')
tic = time()
features = ['MedInc', 'AveOccup', 'HouseAge', 'AveRooms']
display = plot_partial_dependence(
est, X_train, features, kind="average", subsample=50,
n_jobs=3, grid_resolution=20, random_state=0
)
# average / individual
print(f"done in {time() - tic:.3f}s")
display.figure_.suptitle(
'Partial Dependence Plot
'
)
display.figure_.subplots_adjust(hspace=0.3)
3.2 二维-部分依赖图(Partial Dependence Plot)
features = ['AveOccup', 'HouseAge', ('AveOccup', 'HouseAge')]
print('Computing partial dependence plots...')
tic = time()
_, ax = plt.subplots(ncols=3, figsize=(9, 4))
display = plot_partial_dependence(
est, X_train, features, kind='average', n_jobs=3, grid_resolution=20,
ax=ax,
)
print(f"done in {time() - tic:.3f}s")
display.figure_.suptitle(
'Partial dependence of house value on non-location features
'
'for the California housing dataset, with Gradient Boosting'
)
display.figure_.subplots_adjust(wspace=0.4, hspace=0.3)
3.3 Individual Conditional Expectation Plot
个体条件期望图(Individual Conditional Expectation Plot)
print('Computing partial dependence plots...')
tic = time()
features = ['MedInc', 'AveOccup', 'HouseAge', 'AveRooms']
display = plot_partial_dependence(
est, X_train, features, kind="individual", subsample=50,
n_jobs=3, grid_resolution=20, random_state=0
)
# average / individual
print(f"done in {time() - tic:.3f}s")
display.figure_.suptitle(
'Individual Conditional Expectation Plot
'
)
display.figure_.subplots_adjust(hspace=0.3)
3.4 both:PDP + ICE
# both = PDP + ICE
print('Computing partial dependence plots...')
tic = time()
features = ['MedInc', 'AveOccup', 'HouseAge', 'AveRooms']
display = plot_partial_dependence(
est, X_train, features, kind="both", subsample=50,
n_jobs=3, grid_resolution=20, random_state=0
)
# average / individual
print(f"done in {time() - tic:.3f}s")
display.figure_.suptitle(
'Individual Conditional Expectation Plot
'
)
display.figure_.subplots_adjust(hspace=0.3)
其中,深色的是PDP,浅色的是ICE的样本
相关文章
- EasyCVR对接华为iVS订阅摄像机和用户变更请求接口介绍
- 精选 | 腾讯云CDN内容加速场景有哪些?
- 模块化网络防止基于模型的多任务强化学习中的灾难性干扰
- 用搜索和注意力学习稳健的调度方法
- 用于多变量时间序列异常检测的学习图神经网络
- 助力政企自动化自然生长,华为WeAutomate RPA是怎么做到的?
- 使用腾讯轻量云搭建Fiora聊天室
- TSRC安全测试规范
- 云计算“功守道”
- 助力成本优化,腾讯全场景在离线混部系统Caelus正式开源
- Flink 利器:开源平台 StreamX 简介
- 腾讯云实践 | 一图揭秘腾讯碳中和?解决方案
- 深度学习中的轻量级网络架构总结与代码实现
- 信息系统项目管理师(高项复习笔记三)
- Adobe国际认证让科技赋能时尚
- c++该怎么学习(面试吃土记)
- 面试官问发布订阅模式是在问什么?
- 面试官:请实现一个通用函数把 callback 转成 promise
- 空中悬停、翻滚转身、成功着陆,我用强化学习「回收」了SpaceX的火箭
- 中山大学林倞解读视觉语义理解新趋势:从表达学习到知识及因果融合