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


部分依赖图可以用来展示一个特征是怎样影响模型预测的。可以用部分依赖图回答一些与下面这些类似的问题:1. 假如保持其它所有的特征不变,经纬度对房价有什么影响?换句话说,相同大小的房子,在不同的地方价格会有什么差别?2. 在两组不同的人群上,模型预测出的健康水平差异是由他们的负债水平引起的,还是另有原因?

这是第三节:Partial Dependence Plots

特征重要性展示的是哪些变量对预测的影响最大,而部分依赖图展示的是特征如何影响模型预测的。

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

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

如果你对线性回归或逻辑回归比较熟悉的话,部分依赖图起到的效果跟这些模型里面的参数差不多。但是,与简单模型中的参数相比,复杂模型上的依赖图可以捕捉到更复杂的模式。

工作原理

跟排列重要性一样,部分依赖图也是要在拟合出模型之后才能进行计算。 模型是在真实的未加修改的真实数据上进行拟合的。

以足球比赛为例,球队间可能在很多方面都存在着不同。比如传球次数,射门次数,得分数等等。乍看上去,似乎很难梳理出这些特征产生的影响。

为了搞清楚部分依赖图是怎样把每个特征的影响分离出来的,首先我们只看一行数据。比如,这行数据显示的可能是一支占有50%的控球时间,传了100次球,射门了10次,得了1分的球队。

接下来,利用训练好的模型和上面的这一行数据去预测该队斩获最佳球员的概率。但是,我们会多次改变某一特征的数值,从而产生一系列预测结果。比如我们会在把控球时间设成40%的时候,得到一个预测结果,设成50%的时候,得到一个预测结果,设成60%的时候,也得到一个结果,以此类推。以从小到大设定的控球时间为横坐标,以相应的预测输出为纵坐标,我们可以把实验的结果画出来。

代码示例

在这里,重点不是建模过程,所以在下面的代码中,不会有过多数据探索和建模的内容。

训练模型

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 DecisionTreeClassifierdata = 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)

为了节省解释的时间,第一个例子用决策树,如下所示。在实际应用中,你可能会用到更复杂的模型。

决策树结构可视化

from sklearn import tree
import graphviztree_graph = tree.export_graphviz(tree_model, out_file=None, feature_names=feature_names)
graphviz.Source(tree_graph)

怎么理解得到的决策树:

  • 非叶子节点顶部的数值表示分支标准
  • 节点最底部的一对数字表示当前节点上正负类样本的数目

可以用PDPBox库来生成部分依赖图。示例如下:

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')# plot it
pdp.pdp_plot(pdp_goals, 'Goal Scored')
plt.show()

在看上面的部分依赖图的时候,有两点值得注意的地方:

  • y轴表示的是模型预测相较于基线值或最左边的值的变化
  • 蓝色阴影部分表示置信区间。

从这幅图可以看出,进一个球会显著地增加获得最佳球员称号地机会,但是进更多的球似乎对预测的影响不大。

下面是另外一个示例图:

feature_to_plot = 'Distance Covered (Kms)'
pdp_dist = pdp.pdp_isolate(model=tree_model, dataset=val_X, model_features=feature_names, feature=feature_to_plot)pdp.pdp_plot(pdp_dist, feature_to_plot)
plt.show()

这种图似乎太简单了,并不能代表现实情况。其实这是因为模型太简单了。从上面的的决策树结构图可以看出,上面两幅部分依赖图展示的结果正是决策树的结构。

通过部分依赖图,可以比较轻松地比较不同模型的结构或含义。下面是一个随机森林的例子:

# 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的话,球队会更有可能斩获最佳球员。但是跑动得更多的话,可能性就会下降一些。

一般来说,这条曲线的光滑形态看上去比决策树的阶跃函数更可信。但是因为例子中用的数据集太小了,所以在对任意一个模型进行解释的时候,要特别注意选用的方式。

2D 部分依赖图

如果你对特征之间的相互作用感兴趣的话,2D部分依赖图就能排得上用场了。举个例子看下。

仍然以决策树模型为例,下面会生成一个非常简单的图,但是你仍然能够把你从图中看出的东西跟决策树本身的结果匹配到一起。

# Similar to previous PDP plot except we use pdp_interact instead of pdp_isolate and pdp_interact_plot instead of pdp_isolate_plot
features_to_plot = ['Goal Scored', 'Distance Covered (Kms)']
inter1  =  pdp.pdp_interact(model=tree_model, dataset=val_X, model_features=feature_names, features=features_to_plot)pdp.pdp_interact_plot(pdp_interact_out=inter1, feature_names=features_to_plot, plot_type='contour', plot_pdp=True)
plt.show()

上面这幅图展示了在Goals ScoredDistance coverd两个特征的任意组合上的预测结果。

比如,当一个球队得了至少一分,并且跑通的总距离接近100km的时候,模型预测的结果最高。如果得了0分,跑动的距离就没什么用了。你能从决策树中看出这一结果吗?

但是如果球队得分了的话,跑动的距离是会影响到预测的。确定你可以从2D的部分依赖图中看出这一个结果。你能从决策树中看出同样的结果吗?

Partial Dependence Plots —— 部分依赖图_特征如何影响模型预测相关推荐

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

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

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

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

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

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

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

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

  5. 10.Partial Dependence Plots

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

  6. ML:基于葡萄牙银行机构营销活动数据集(年龄/职业等)利用Pipeline框架(两种类型特征并行处理)+多种模型预测(分层抽样+调参交叉验证评估+网格/随机搜索+推理)客户是否购买该银行的产品二分类案

    ML之pipeline:基于葡萄牙银行机构营销活动数据集(年龄/职业/婚姻/违约等)利用Pipeline框架(两种类型特征并行处理)+多种模型预测(分层抽样+调参交叉验证评估+网格搜索/随机搜索+模型 ...

  7. ML之RF:基于葡萄牙银行机构营销活动数据集(年龄/职业/婚姻/违约等)利用Pipeline框架(两种类型特征并行处理)+RF模型预测(调参+交叉验证评估+模型推理)客户是否购买该银行的产品二分类案例

    ML之RF:基于葡萄牙银行机构营销活动数据集(年龄/职业/婚姻/违约等)利用Pipeline框架(两种类型特征并行处理)+RF模型预测(调参+交叉验证评估+模型推理)客户是否购买该银行的产品二分类案例 ...

  8. bagging和时间序列预测_时间序列的LSTM模型预测——基于Keras

    一.问题背景     现实生活中,在一系列时间点上观测数据是司空见惯的活动,在农业.商业.气象军事和医疗等研究领域都包含大量的时间序列数据.时间序列的预测指的是基于序列的历史数据,以及可能对结果产生影 ...

  9. Partial Dependence and Individual Conditional Expectation plots

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

最新文章

  1. vs+命令行运行带参数cpp文件
  2. 最强通用编译器优化工具!MIT三篇顶会论文打造,准确率是传统方法5倍
  3. git clone报错
  4. Java正则之Unicode属性匹配的那些事
  5. GDAL/OGR 1.9.0获取shp文件中中文字段值和属性值乱码文件解决
  6. webService(简单小demo)
  7. jsp地址栏传中文显示乱码解决方法
  8. 追逐鼠标光标的好奇小猫咪
  9. Android应用程序开发实用案例50则
  10. 简单粗暴卸载Oracle RAC
  11. 制作纯净版的xp系统的U盘安装盘
  12. C++:实现标准体重判定
  13. 个人支付接口现状分析——如何选择一个靠谱的个人支付接口
  14. Contrastive Learning Rivals Masked Image Modeling in Fine-tuning via Feature Distillation
  15. 神经网络控制与matlab仿真,matlab神经网络拟合预测
  16. 硬件SPI控制ST7789V
  17. Cypher语法简介
  18. 标准数据库语言SQL-基础入门(详细版总结)
  19. 新基于交互视频的智慧旅游解决方案
  20. 家里网速慢,该如何提升网速?

热门文章

  1. 户口迁入深圳的优劣势一览
  2. 【核心基础知识】javascript的数据类型
  3. strace分析mysql_strace 命令分析mysql的相关的问题
  4. mysql zimbra_Zimbra 相关设置
  5. 百度网盘转存阿里云盘最好的机会(阿里云盘15天20TB超级会员兑换截至8月31日),附软件和教程
  6. Beep音乐:Only My Railgun
  7. 渗透攻防必备工具(基础篇,收藏起来)
  8. 【机器学习】逻辑回归之心脏病预测
  9. ux设计工具_UX设计中的工具和实用主义
  10. 实现AI角色的自主移动——操控行为