今天我们来聊一聊如果解读一个特征对模型的影响~

说起特征对模型的影响,我们需要看两方面:

  • 一是通过PermutationImportance函数查看特征重要性(Feature Importance),这个是研究某一个特征对模型预测影响的大小
  • 另一个是部分依赖图反映这个特征如何影响了预测

上一篇推送我们已经介绍了特征重要性的知识,今天重点聊一聊部分依赖图的原理和应用。

介绍

PDP会展示一个或两个特征对模型预测的边际效应,我们可以通过绘制特征和预测目标之间的一维关系或二维关系图来了解特征与目标之间的关系。
比如我们想知道,保持其他所有特征不变,哪个特征对留存的提升影响最大?在两组不同人群上,模型预测出的健康水平差异是由他们的负债水平引起的,还是其他原因?

类似于线性回归或者逻辑回归中的系数,可以解释各个特征对模型结果的影响,部分依赖图是对复杂模式中特征的影响进行描绘。

工作原理

与 permutation importance 相似,Partial Dependence Plots 也是在训练好(拟合好的)的模型上进行的。
工作过程:多次改变某一特征的数值,从而产生一系列的预测结果。比如研究年龄特征会不会对留存有影响,我们可以把年龄段从小到大排列,一次看不同年龄段得到的预测结果,以年龄为横坐标,相应的预测输出为纵轴,可以用pdp_plot画出来。

代码示例

假设我们已经有一个用决策树训练好的模型
例子引用于知乎文章 https://zhuanlan.zhihu.com/p/100454991

可以用PDPBox库来生产部分依赖图, 看’Goal Scored’这个feature是如何影响这个决策树模型的。
1. 训练模型

// A code block
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
data = pd.read_csv('../input/fifa-2018-match-statistics/FIFA 2018 Statistics.csv')
y = (data['Man of the Match'] == "Yes")  # Convert from string "Yes"/"No" to binary
feature_names = [i for i in data.columns if data[i].dtype in [np.int64]]
X = data[feature_names]
train_X, val_X, train_y, val_y = train_test_split(X, y, random_state=1)
tree_model = DecisionTreeClassifier(random_state=0, max_depth=5, min_samples_split=5).fit(train_X, train_y)

2. 调用pdp函数 pdp_isolate

// A code block
from matplotlib import pyplot as plt
from pdpbox import pdp, get_dataset, info_plots# Create the data that we will plot
pdp_goals = pdp.pdp_isolate(model=tree_model, dataset=val_X, model_features=feature_names, feature='Goal Scored')# pdp_isolate函数解释
#model : 一个训练好的模型;
# dataset: pandas DataFrame data set on which the model is trained,这里是train_test_split取出test X集;
# model_features: 你要观察的feature or feature list整体, 如果做过one-hot-encoding的features, feature list是必须的;
# feature: 要观察的某个feature;
#num_grid_points: integer, optional, default=10,number of grid points for numeric feature

3. 画图 pdp_plot

# plot it
pdp.pdp_plot(pdp_goals, 'Goal Scored')
plt.show()

图形输出:

这个图怎么读?

  • y轴表示的是模型预测相较于基线值或最左边的值的变化。
  • 蓝色阴影部分表示置信区间
    这个图的结论:进一个球会显著地增加获得最佳球员称号地机会,但是进更多的球似乎对预测的影响不大。

但是决策树模型比较简单,未必能看到真实的情况,也可以用随机森林或者其他算法再模拟一遍,来检验特征对模型预测的影响。
再看一下随机森林的例子:

# Build Random Forest model
rf_model = RandomForestClassifier(random_state=0).fit(train_X, train_y)pdp_dist = pdp.pdp_isolate(model=rf_model, dataset=val_X, model_features=feature_names, feature=feature_to_plot)pdp.pdp_plot(pdp_dist, feature_to_plot)
plt.show()


这个图的解读是,”如果所有球员一共跑动了100km的话,球队会更有可能斩获最佳球员。但是跑动得更多的话,可能性就会下降一些。“ (引用子知乎https://zhuanlan.zhihu.com/p/100454991)

在实操过程中,要注意数据集的大小,以及模拟出的曲线光滑程度,像上面决策树的曲线就是过于简单,无法很真实的表现现实情况,,随机森林的光滑形态看上去比决策树的阶跃函数更可信。所以在对任意一个模型进行解释的时候,要特别注意选用的方式。

Partial Dependence Plots - 部分依赖图实践相关推荐

  1. Partial Dependence Plots —— 部分依赖图_特征如何影响模型预测

    笔者把自己这篇原本发布在github page上的文章迁移到了这里,原github page网址:https://iceflameworm.github.io/2019/08/28/partial-p ...

  2. R语言使用DALEX包的model_profile函数对caret包生成的多个算法模型的离散变量进行分析、使用偏依赖图(Partial Dependence Plots)解释某个离散特征和目标y的关系

    R语言使用DALEX包的model_profile函数对caret包生成的多个算法模型的离散变量进行分析.使用偏依赖图(Partial Dependence Plots)解释某个离散特征和目标值y的关 ...

  3. 偏依赖图(Partial Dependence Plots)是什么?排列重要性(Permutaion Importance)是什么?如何解读?有什么意义?

    偏依赖图(Partial Dependence Plots)是什么?排列重要性(Permutaion Importance)是什么?如何解读?有什么意义? 目录 偏依赖图(Partial Depend ...

  4. ML之PDP:机器学习可解释性之部分依赖图(Partial Dependence Plots)之每个特征如何影响您的预测?

    ML之PDP:机器学习可解释性之部分依赖图(Partial Dependence Plots)之每个特征如何影响您的预测? 目录 机器学习可解释性之部分依赖图之每个特征如何影响您的预测? Partia ...

  5. R语言使用DALEX包的model_profile函数对h2o包生成的多个算法模型的连续变量进行分析、使用偏依赖图(Partial Dependence Plots)解释某个离散特征和目标值y的关系

    R语言使用DALEX包的model_profile函数对h2o包生成的多个算法模型的连续变量进行分析.使用偏依赖图(Partial Dependence Plots)解释某个离散特征和目标值y的关系 ...

  6. 10.Partial Dependence Plots

    本教程是ML系列的一部分. 在此步骤中,您将学习如何创建和解释部分依赖图,这是从模型中提取洞察力的最有价值的方法之一. What Are Partial Dependence Plots 有人抱怨机器 ...

  7. Partial Dependence and Individual Conditional Expectation plots

    PDP(Partial dependence plots)和 ICE(individual conditional expectation)可以用来分析预测目标和输入特征之间的相互关系.PDP和ICE ...

  8. 5.2 部分依赖图 (Partial Dependence Plot, PDP)

    部分依赖图(短 PDP 或 PD 图)显示了一个或两个特征对机器学习模型的预测结果的边际效应 (J. H. Friedman 200127). 部分依赖图可以显示目标和特征之间的关系是线性的.单调的还 ...

  9. 机器学习模型 非线性模型_机器学习模型说明

    机器学习模型 非线性模型 A Case Study of Shap and pdp using Diabetes dataset 使用糖尿病数据集对Shap和pdp进行案例研究 Explaining ...

  10. 数据挖掘#特征工程(二)特征重要性及可解释性总结

    在打比赛的时候一直贯穿的思考,大概就是判别各个特征的重要性. 在建立模型之前,特征重要性能够帮助训练模型,防止过拟合,提升模型的RUC效果. 建立模型之后,特征重要性能够增强模型(集成模型 非深度学习 ...

最新文章

  1. 金融领域首个开源中文BERT预训练模型,熵简科技推出FinBERT 1.0
  2. Android 录制视频
  3. Oracle form培训资料,新Oracle Form开发标准培训文档(完整版本)
  4. java nio doug_Java NIO简介
  5. 如何使用grup制作U盘多重启动盘
  6. 开关电源异址替换实战割接
  7. Spark SQL概述,DataFrames,创建DataFrames的案例,DataFrame常用操作(DSL风格语法),sql风格语法
  8. 编码GBK的不可映射字符
  9. react 使用 leaflet 百度地图_【React】react项目中应用百度地图添加起始点绘制路线...
  10. “一张图”解释特色小镇发展历程
  11. oracle asm ora 15041,ORA-15041,ORA-01274 故障解决实例
  12. Json转换成excel 离线版
  13. std::numeric_limits的一个使用注意事项
  14. android 常用机型尺寸_android手机屏幕密度和逻辑尺寸
  15. 【视频分享】Spark大型项目实战 138讲
  16. FPGA Vivado AXI _DMA IP介绍
  17. kubectl exec
  18. 1233850-99-1|2-(4-丙氧基苯基)咪唑[4,5f][1,10]邻菲啰啉|分子式:C22H18N4O-齐岳配体
  19. wifi有网可以连接,但打不开网页了,找不到 服务器 dns 地址
  20. 3章等价类划分法-城市号码

热门文章

  1. Marlin固件的欢迎界面
  2. 基于HTML贪吃蛇游戏摘要,基于JavaScript实现贪吃蛇游戏
  3. DHCP服务以及配置DHCP服务器
  4. 比原链CEO朗豫:DeFi让用户真正理解区块链,意义重大
  5. Windows10下电脑版微信未读消息自动弹窗工具
  6. 我的世界java版匠魂_我的世界匠魂首发版
  7. Unity Bounds 边界框(包围盒)
  8. android 优秀框架整理
  9. CTU Open Contest 2019 -A-Beer Barrels
  10. unity Animator 同时播放两个动画,并动态更换Animator中的AnimationClip