12.Cross-Validation

本教程是ML系列的一部分。 在此步骤中,您将学习如何使用交叉验证来更好地衡量模型性能。

What is Cross Validation

机器学习是一个迭代过程。

您将面临关于要使用的预测变量,要使用的模型类型,提供这些模型的参数等的选择。我们通过测量各种替代方案的模型质量,以数据驱动的方式做出这些选择。

您已经学会使用train_test_split来分割数据,因此您可以测量测试数据的模型质量。 交叉验证将此方法扩展到模型评分(或“模型验证”)。与train_test_split相比,交叉验证可以更准确地衡量模型的质量,但运行时间更长。

The Shortcoming of Train-Test Split

想象一下,你有一个5000行的数据集。 train_test_split函数有一个test_size参数,您可以使用该参数来决定进入训练集的行数以及进入测试集的行数。测试集越大,您对模型质量的测量就越可靠。在极端情况下,您可以想象测试集中只有一行数据。如果您比较替代模型,哪一个对单个数据点做出最佳预测将主要是运气问题。

通常,您将保留约20%作为测试数据集。但即使测试集中有1000行,也有一些随机的机会来确定模型分数。模型可能在一组1000行中表现良好,即使它在不同的1000行上不准确。测试集越大,我们的模型质量测量中的随机性(又称“噪声”)就越小。

但是我们只能通过从训练数据中删除数据来获得大量测试集,而较小的训练数据集意味着更糟糕的模型。事实上,对小型数据集的理想建模决策通常不是大型数据集的最佳建模决策。

 

The Cross-Validation Procedure

在交叉验证中,我们在不同的数据子集上运行建模过程,以获得多种模型质量度量。 例如,我们可以进行5次折叠或实验。 我们将数据分为5个部分,每个部分占完整数据集的20%。

https://i.stack.imgur.com/1fXzJ.png

我们进行了一项名为实验1的实验,该实验使用第一个折叠作为保留集,其他所有内容都作为训练数据。 这为我们提供了基于20%保留集的模型质量度量,就像我们使用简单的train-test分割得到的那样。
然后我们进行第二次实验,我们从第二次折叠中拿出数据(使用除第二次折叠之外的所有内容来训练模型。)这使我们对模型质量进行了第二次估计。 我们重复这个过程,使用每次折叠作为保留。 将这些放在一起,100%的数据在某些时候被用作保留。

回到上面的train-test分割示例,如果我们有5000行数据,我们最终得到基于5000行保持的模型质量度量(即使我们不同时使用所有5000行)。

Trade-offs Between Cross-Validation and Train-Test Split

交叉验证可以更准确地衡量模型质量,如果您做出大量建模决策,这一点尤为重要。但是,它可能需要更长的时间才能运行,因为它会为每次折叠估算一次模型。所以它正在做更多的工作。

鉴于这些权衡,您应该何时使用每种方法?在小型数据集上,运行交叉验证的额外计算负担并不是什么大问题。这些也是模型质量得分在train-test split时最不可靠的问题。因此,如果您的数据集较小,则应运行交叉验证。

出于同样的原因,对于较大的数据集,简单的train-test split分割就足够了。它运行得更快,你可能有足够的数据,几乎不需要重新使用其中的一些来保留。

大型和小型数据集没有简单的阈值。如果您的模型运行需要几分钟或更短时间,则可能需要切换到交叉验证。如果您的模型运行时间更长,则交叉验证可能会使您的工作流程变得更加糟糕。

或者,您可以运行交叉验证并查看每个实验的分数是否接近。如果每个实验给出相同的结果,那么train-test split分裂可能就足够了。

Example

首先我们读取数据

【1】

import pandas as pd
data = pd.read_csv('../input/melb_data.csv')
cols_to_use = ['Rooms', 'Distance', 'Landsize', 'BuildingArea', 'YearBuilt']
X = data[cols_to_use]
y = data.Price

然后指定我们的建模步骤的管道(如果你不使用管道,可能很难正确地进行交叉验证)

【2】

from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import Imputer
my_pipeline = make_pipeline(Imputer(), RandomForestRegressor())

最后我们得到交叉验证得分:

【3】

from sklearn.model_selection import cross_val_score
scores = cross_val_score(my_pipeline, X, y, scoring='neg_mean_absolute_error')
print(scores)
[-322244.30158131 -305507.19909774 -284635.2229142 ]

您可能会注意到我们为评分指定了一个参数。 这指定了要报告的模型质量的度量。 scikit-learn的文档显示了一个选项列表。

在这种情况下,我们指定负平均绝对误差有点令人惊讶。 Scikit-learn有一个约定,其中定义了所有指标,因此更高的数字更好。 在这里使用否定词允许它们与该约定一致,尽管在其他地方几乎闻所未闻。

您通常需要单一的模型质量度量来比较模型。 所以我们采用实验的平均值。

【4】

print('Mean Absolute Error %2f' %(-1 * scores.mean()))
Mean Absolute Error 304128.907864

Conclusion

使用交叉验证为我们提供了更好的模型质量测量,还有清理代码的额外好处(不再需要跟踪单独的训练和测试集。所以,这是一个很好的胜利。

Your Turn

  1. 将正在进行的项目的代码从train-test split转换为交叉验证。 确保删除将数据集划分为训练和测试数据集的所有代码。 留下您不再需要的代码将是草率的。
  2. 在模型中添加或删除预测变量。 使用两组预测变量查看交叉验证分数,并了解如何比较分数。

 

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

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

相关文章

服务器不显示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…

【2018ACM山东省赛 - B】Bullet(二分 + 二分图匹配,匈牙利算法,卡常)

题干: Problem Description In GGO, a world dominated by gun and steel, players are fighting for the honor of being the strongest gunmen. Player Shino is a sniper, and her aimed shot kills one monster at a time. Now she is in an nnn \times nnn m…

13.Data Leakage

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

0.Overview----Machine Learning

本文为Kaggle Learn的Machine Learning课程的中文翻译,原文链接为:https://www.kaggle.com/learn/machine-learning 1.How Models Work The first step if youre new to machine learning 2.Explore Your Data Load data and set up your environment …

【2018ACM山东省赛 - C】Cities(最小生成树变形优化,贪心思维)

题干: Problem Description There are nnn cities in Byteland, and the ithi_{th}ith​ city has a value aia_iai​. The cost of building a bidirectional road between two cities is the sum of their values. Please calculate the minimum cost of connec…

项目总结1:微信扫码自动识别设备类型并跳转到相应的应用下载页面(apk或App Store)之解决方案

问题分析:普通页面一般无法调用微信的扫一扫接口,从而否定通过微信扫一扫功能给我们判断当前扫码的设备类型。 解决方案:通过应用下载页面自身来获取当前访问的客户端设备类型(iPhone、Android、iPad),然后…

《TCP/IP详解》学习笔记(六):UDP 协议

UDP 简要介绍 UDP 是传输层协议,和 TCP 协议处于一个分层中,但是与 TCP 协议不同,UDP 协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议。 UDP 协议头 1UDP 端口号 由于很多软件需要用到 UDP 协议&am…

【2018ACM山东省赛 - E】Sequence(树状数组,思维,优化)

题干&#xff1a; We define an element aia_iai​ in a sequence "good", if and only if there exists a j(1≤j<i)j(1\le j < i)j(1≤j<i) such that aj<aia_j < a_iaj​<ai​. Given a permutation ppp of integers from 111 to nnn. Remove …