10.Partial Dependence Plots

本教程是ML系列的一部分。 在此步骤中,您将学习如何创建和解释部分依赖图,这是从模型中提取洞察力的最有价值的方法之一。

What Are Partial Dependence Plots

 有人抱怨机器学习模型是黑盒子。这些人会争辩说我们无法看到这些模型如何处理任何给定的数据集,因此我们既不能提取洞察力也不能确定模型的问题。

总的来说,提出这种说法的人不熟悉部分依赖图。部分依赖图显示每个变量或预测变量如何影响模型的预测。这对于以下问题很有用:

  1.     男女之间的工资差异有多少仅仅取决于性别,而不是教育背景或工作经历的差异?
  2.     控制房屋特征,经度和纬度对房价有何影响?为了重申这一点,我们想要了解在不同区域如何定价同样大小的房屋,即使 实际上这些地区的房屋大小不同。
  3.     由于饮食差异或其他因素,两组之间是否存在健康差异?

如果您熟悉线性或逻辑回归模型,则可以与这些模型中的系数类似地对部分依赖图进行解释。但是,部分依赖图可以从数据中捕获更复杂的模式,并且可以与任何模型一起使用。如果您不熟悉线性或逻辑回归,请不要接受这种比较。

我们将在下面展示几个示例,解释它们的含义,然后讨论代码。

Interpreting Partial Dependence Plots

我们将从2个部分依赖图开始,显示Price和来自Melbourne Housing数据集的几个变量之间的关系(根据我们的模型)。 我们将介绍如何创建和解释这些图。

【1】

import pandas as pd
from sklearn.ensemble import GradientBoostingRegressor, GradientBoostingClassifier
from sklearn.ensemble.partial_dependence import partial_dependence, plot_partial_dependence
from sklearn.preprocessing import Imputercols_to_use = ['Distance', 'Landsize', 'BuildingArea']def get_some_data():data = pd.read_csv('../input/melbourne-housing-snapshot/melb_data.csv')y = data.PriceX = data[cols_to_use]my_imputer = Imputer()imputed_X = my_imputer.fit_transform(X)return imputed_X, yX, y = get_some_data()
my_model = GradientBoostingRegressor()
my_model.fit(X, y)
my_plots = plot_partial_dependence(my_model, features=[0,2], X=X, feature_names=cols_to_use, grid_resolution=10)

 

左图显示了我们的目标,销售价格和距离变量之间的部分依赖关系。此数据集中的距离测量墨尔本中央商务区的距离。

仅在模型拟合后才计算部分依赖图。该模型适用于实际数据。在那些真实的数据中,城镇不同地区的房屋可能有多种不同的方式(不同的年龄,大小等)。但是在模型拟合之后,我们可以从一个房屋的所有特征开始。比如,一间有2间卧室,2间浴室,10岁的房子等等。

然后我们使用该模型来预测该房屋的价格,但我们在进行预测之前更改距离变量。我们首先预测距离为4时房屋的价格。然后我们预测设定距离为5的价格。然后再次预测距离为6的价格。依此类推。当我们从小的距离值(在水平轴上)移动时,我们会追踪预测价格如何变化(在垂直轴上)。

在本说明中,我们只使用了一个房子。但由于相互作用,单个房屋的部分依赖图可能是非典型的。所以,我们用多个房子重复那个实验,然后我们在垂直轴上绘制平均预测价格。你会看到一些负数。这并不意味着会以负价出售。相反,它意味着价格将低于该距离的实际平均价格。

在左图中,我们看到房价下跌,因为我们进一步从中央商务分散注意力。虽然大约16公里外似乎有一个不错的郊区,但房价高于许多更近的郊区。

右图显示了建筑面积的影响,其解释类似。较大的建筑面积意味着更高的价格。

这些图既可用于提取洞察力,也可用于检查模型是否正在学习您认为合理的内容。

Code

我们不关注加载数据的代码,相反关注绘图的代码:

【2】

def get_some_data():cols_to_use = ['Distance', 'Landsize', 'BuildingArea']data = pd.read_csv('../input/melbourne-housing-snapshot/melb_data.csv')y = data.PriceX = data[cols_to_use]my_imputer = Imputer()imputed_X = my_imputer.fit_transform(X)return imputed_X, y

【3】

from sklearn.ensemble.partial_dependence import partial_dependence, plot_partial_dependence# get_some_data is defined in hidden cell above.
X, y = get_some_data()
# scikit-learn originally implemented partial dependence plots only for Gradient Boosting models
# this was due to an implementation detail, and a future release will support all model types.
my_model = GradientBoostingRegressor()
# fit the model as usual
my_model.fit(X, y)
# Here we make the plot
my_plots = plot_partial_dependence(my_model,       features=[0, 2], # column numbers of plots we want to showX=X,            # raw predictors data.feature_names=['Distance', 'Landsize', 'BuildingArea'], # labels on graphsgrid_resolution=10) # number of values to plot on x axis

一些与plot_partial_dependence有关的提示:

  1.     这些要素是您希望绘制的X数组或数据框中的列号。这开始看起来比2或3个变量更糟糕。您可以一次重复调用绘图2或3。
  2.     可以选择确定水平轴上的哪些点。最简单的是grid_resolution,我们用它来确定绘制了多少个不同的点。随着该值的增加,这些图形看起来呈锯齿状,因为您将在模型中拾取大量随机性或噪声。最好不要在字面上采用小的或锯齿状的波动。 grid_resolution的较小值使这一点平滑。对于具有多行的数据集来说,这也是一个问题。
  3.     有一个叫做partial_dependence的函数来获取构成这个图的原始数据,而不是制作视觉图。如果您想使用Seaborn等绘图包控制它的可视化方式,这非常有用。通过适度的努力,您可以制作更好看的图。

Another Examples

以下是泰坦尼克号数据中非常简单的模型的部分图。

[4]

titanic_data = pd.read_csv('../input/titanic/train.csv')
titanic_y = titanic_data.Survived
clf = GradientBoostingClassifier()
titanic_X_colns = ['PassengerId','Age', 'Fare',]
titanic_X = titanic_data[titanic_X_colns]
my_imputer = Imputer()
imputed_titanic_X = my_imputer.fit_transform(titanic_X)clf.fit(imputed_titanic_X, titanic_y)
titanic_plots = plot_partial_dependence(clf, features=[1,2], X=imputed_titanic_X, feature_names=titanic_X_colns, grid_resolution=8)

 

 

乍一看,这些看起来可能令人惊讶。 但他们展示了一些有趣的见解:

  1.      年轻人生存几率大。 这与历史叙述一致,他们首先让女性和儿童脱离了泰坦尼克号。
  2.      支付更多的人有更好的生存几率。 事实证明,更高的票价让你有一个更接近船顶的小屋,并且可能给你更好的获得救生艇的几率。

Conclusion

部分依赖图是从复杂模型中提取洞察力的好方法(尽管不是唯一的方法)。这些可以非常强大,可以将这些见解传达给同事或非技术用户。

当这些图来自非实验数据时,对于如何解释这些图有各种各样的观点。有些人声称,除非来自实验,否则你不能对数据的因果关系做任何结论。其他人对从非实验数据(也称为观察数据)可以学到的东西更加积极。这是数据科学领域的一个分歧主题,超出了本教程的范围。

但大多数人都同意这些对于理解您的模型很有用。此外,鉴于大多数真实世界数据源的混乱,您的模型捕获真实模式也是一个很好的理智检查。

partial_dependence_plot函数是获取这些图的简单方法,尽管结果在视觉上并不美观。 partial_dependence函数为您提供原始数据,以防您想要制作演示质量图表。

Your Turn

在项目中选择三个预测变量。 制定关于部分依赖图将是什么样的。 创建绘图,并根据您的假设检查结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot监控服务器信息,面试官:聊一聊SpringBoot服务监控机制

目录前言任何一个服务如果没有监控,那就是两眼一抹黑,无法知道当前服务的运行情况,也就无法对可能出现的异常状况进行很好的处理,所以对任意一个服务来说,监控都是必不可少的。就目前而言,大部分微服务应用…

0.《Apollo自动驾驶工程师技能图谱》

【新年礼物】开工第一天,送你一份自动驾驶工程师技能图谱! 布道团队 Apollo开发者社区 1月 2日 AI时代到来,人才的缺乏是阻碍行业大步发展的主要因素之一。Apollo平台发布以来,我们接触到非常多的开发者他们并不是专业自动驾驶领…

【POJ - 2337】Catenyms(欧拉图相关,欧拉通路输出路径,tricks)

题干: A catenym is a pair of words separated by a period such that the last letter of the first word is the same as the last letter of the second. For example, the following are catenyms: dog.gophergopher.ratrat.tigeraloha.alohaarachnid.dog A…

12.Cross-Validation

本教程是ML系列的一部分。 在此步骤中,您将学习如何使用交叉验证来更好地衡量模型性能。 What is Cross Validation 机器学习是一个迭代过程。 您将面临关于要使用的预测变量,要使用的模型类型,提供这些模型的参数等的选择。我们通过测量各…

服务器不显示u盘,服务器不读u盘启动

服务器不读u盘启动 内容精选换一换介绍使用Atlas 200 DK前需要准备的配件及开发服务器。Atlas 200 DK使用需要用户提前自购如表1所示配件。准备一个操作系统为Ubuntu X86架构的服务器,用途如下:为Atlas 200 DK制作SD卡启动盘。读卡器或者Atlas 200 DK会通…

Leetcode刷题实战(1):Two Sum

Leetcode不需要过多介绍了,今天一边开始刷题一边开始总结: 官网链接如下:https://leetcode.com/problemset/all/ 题1描述: 1Two Sum38.80%Easy Given an array of integers, return indices of the two numbers such that they…

信息服务器为什么选择在贵州,为啥云服务器在贵州

为啥云服务器在贵州 内容精选换一换当用户已在ECS服务购买GPU加速型云服务器,并且想在该云服务器上运行应用时,可以通过纳管的方式将该云服务器纳入VR云渲游平台管理。登录控制台,在服务列表中选择“计算 > VR云渲游平台”。在左侧导航栏&…

LeetCode刷题实战(2):Add Two Numbers

题2描述: 2Add Two Numbers29.10%Medium You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a…

《TCP/IP详解》学习笔记(四):ICMP 协议、ping 和 Traceroute

ICMP 协议介绍 前面讲到了,IP 协议并不是一个可靠的协议,它不保证数据被成功送达,那么自然的,保证数据送达的工作应该由其他的模块来完 成。其中一个重要的模块就是 ICMP(网络控制报文)协议。 当传送 IP 数据包发生错误--比如主机…

Apollo自动驾驶入门课程第①讲—无人驾驶概览

目录 1. 全面了解自动驾驶主要模块 2. 了解无人车的运作方式 3. 开放式软件栈 4. 本节其他重点 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 8月1日 在Apollo 3.0发布的同时,我们面向更多对自动驾驶感兴趣的开发…

《TCP/IP详解》学习笔记(五):IP选路、动态选路

静态 IP 选路 1一个简单的路由表 选路是 IP 层最重要的功能之一。前面的部分已经简单的讲过路由器是如何根据 IP 数据包的 IP 地址来选择路由的。 这里就不重复了。首先来看看一个简单的系统路由表: 对于一个给定的路由器,可以打印出五种不同的 flag: …

LeetCode刷题实战(43):Multiply Strings

题目描述: 43Multiply Strings28.7%Medium Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string. Example 1: Input: num1 "2", num2 "3" Output…

13.Data Leakage

本教程是ML系列的一部分。在此步骤中,你将学习什么是data leakage及如何预防它。 What is Data Leakage 数据泄漏是数据科学家需要理解的最重要问题之一。 如果您不知道如何防止它,则会频繁出现泄漏,并且会以最微妙和危险的方式破坏您的模…

Apollo自动驾驶入门课程第②讲 — 高精地图

目录 1. 高精地图与传统地图 2. 高精地图与定位、感知规划的关系 2.1 高精地图用于定位 2.2 高精地图用于感知 2.3 高精地图用于规划 3. Apollo高精度地图与构建 3.1 Apollo高精地图 3.2 Apollo高精地图的构建 本文转自微信公众号: Apollo开发者社区 原创&a…

项目总结2:ionic3开发跨平台App如何设置和替换应用图标及启动图

前言: 和原生开发一样,ionic官方提供的设置方式也很简单,只不过多了一个步骤:基于ionic命令的方式自动修改全局的配置文件config.xml。 设置或替换应用图标和应用启动图: 把UI提供的图标拿过来改成特定的名称"i…

LeetCode刷题实战(13):Roman to Integer

题目描述: 13 Roman to Integer 49.5%Easy Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D …

1.Intro to Deep Learning and Computer Vision

Intro 这是Kaggle深度学习教育课程的第一课。 在本课程结束后,您将了解卷积。 卷积是计算机视觉(以及许多其他应用程序)中深度学习模型的基本构建块。 之后,我们将很快开始使用世界一流的深度学习模型。 Lesson [1] from IPy…

SpringMVC常用的视图接口分类及实现类

SpringMVC中常用的视图接口分类及对应的实现类: URL资源视图:InternalResourceView、JstlView 文档视图:AbstractExcelView、AbstractPdfView 报表视图:ConfigurableJsperReportsView等JasperReports报表技术的视图 JSON视图&…

Apollo自动驾驶入门课程第③讲 — 定位

目录 1. 定位的概述 2. 定位方法介绍 2.1 GNSS RTK 2.2 惯性导航 2.3 激光雷达定位 2.4 视觉定位 2.5 Apollo定位 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 8月17日 上周我们发布了 Apollo入门课堂第②讲—高精地图&…

Linux与Bash 编程——Linux文件处理命令-L1

目录: linux系统与shell环境准备 Linux系统简介操作系统简史Linux的发行版:Linux与Windows比较:Linux安装安装包下载Linux的访问方式远程登录方式远程登录软件:mobaxterm的使用:使用电脑命令行连接:sshd的…