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平台发布以来,我们接触到非常多的开发者他们并不是专业自动驾驶领…

【HDU - 1116】【POJ - 1386】Play on Words(判断半欧拉图,欧拉通路)

题干: Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to solve it to open that doors. Because there is no other way to open the doors, the puzzle is very important for us. There is a large number…

11.Pipelines

本教程是ML系列的一部分。 在此步骤中,您将了解如何以及为何使用管道清理建模代码。 What Are Pipelines 管道是保持数据处理和建模代码有序的简单方法。 具体来说,管道捆绑了预处理和建模步骤,因此您可以像使用单个包一样使用整个捆绑包。…

ubuntu服务器创建共享文件夹,Ubuntu samba安装创建共享目录及使用

Ubuntu samba更新了很多版本更新,我本人认为Ubuntu samba是很好使的文件系统,在此向大家推荐。如今技术不断更新,各种使用文件都已经淘汰。我认为还是有很不错的如Ubuntu samba值得大家来运用。一. Ubuntu samba的安装:sudo apt-get insall s…

【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会通…

【FZU - 2039】Pets(二分图匹配,水题)

题干: 有n个人,m条狗,然后会给出有一些人不喜欢一些狗就不会购买,问最多能卖多少狗。。 Input There is a single integer T in the first line of the test data indicating that there are T(T≤100) test cases. In the fir…

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…

【BZOJ - 1305】dance跳舞(拆点网络流,建图,最大流,残留网络上跑最大流)

题干: 一次舞会有n个男孩和n个女孩。每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞。每个男孩都不会和同一个女孩跳两首(或更多)舞曲。有一些男孩女孩相互喜欢,而其他相互不喜欢(不会“单向喜欢”&am…

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

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

【HDU - 1530】Maximum Clique(最大团问题,图论)

题干: Given a graph G(V, E), a clique is a sub-graph g(v, e), so that for all vertex pairs v1, v2 in v, there exists an edge (v1, v2) in e. Maximum clique is the clique that has maximum number of vertex. Input Input contains multiple tests. …

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

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

【CF - 699C】 Vacations (日程安排 dp)

题干: Vasya has n days of vacations! So he decided to improve his IT skills and do sport. Vasya knows the following information about each of this n days: whether that gym opened and whether a contest was carried out in the Internet on that day…

《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…

【2018山东省赛 - A】Anagram(贪心,费用流,KM算法)

题干: Problem Description Orz has two strings of the same length: A and B. Now she wants to transform A into an anagram of B (which means, a rearrangement of B) by changing some of its letters. The only operation the girl can make is to “incr…