本节书摘来自异步社区出版社《写给程序员的数据挖掘实践指南》一书中的第5章,第5.2节,作者:【美】Ron Zacharski(扎哈尔斯基),更多章节内容可以访问云栖社区“异步社区”公众号查看。

5.2. 10折交叉验证的例子

第1步,将数据等分到10个桶中。

我们会将50名篮球运动员和50名非篮球运动员分到每个桶中。每个桶当中放入了100人的信息。

第2步,下列步骤重复10次。
(1)每一次迭代中留存其中一个桶。第一次迭代中留存桶1,第二次留存桶2,其余依此类推。

(2)用其他9个桶的信息训练分类器(第一次迭代中利用从桶2到桶10的信息训练分类器)。

(3)利用留存的数据来测试分类器并保存测试结果。在上例中,这些结果可能如下:

35个篮球运动员被正确分类;

29个非篮球运动员被正确分类。

第3步,对上述结果汇总。
通常情况下我们会将结果放到与下表类似的表格中:

在所有500名篮球运动员中,有372人被正确分类。可能需要做的一件事是将右下角的数字也加上去,也就是说1000人当中有652(372+280)人被正确分类。因此得到的精确率为65.2%。与2折或3折交叉验证相比,基于10折交叉验证得到的结果可能更接近于分类器的真实性能。之所以这样,是因为每次采用90%而不是2折交叉验证中仅仅50%的数据来训练分类器。

留一法(Leave-One-Out)
在机器学习领域,n折交叉验证(n是数据集中样本的数目)被称为留一法。我们已经提到,留一法的一个优点是每次迭代中都使用了最大可能数目的样本来训练。另一个优点是该方法具有确定性。

确定性的含义
假设Lucy集中花费了80个小时来编写一个新分类器的代码。现在是周五,她已经筋疲力尽,于是她请她的两个同事(Emily和Li)在周末对分类器进行评估。她将分类器和相同的数据集交给每个人,请她们做10折交叉验证。周一,她问两人的结果……

嗯,她们得到了不同的结果。她们俩可能是谁犯错了吗?未必如此。在10折交叉验证中,我们随机将数据分到桶中。由于随机因素的存在,有可能Emily和Li的数据划分结果并不完全一致。实际上,她们划分一致的可能性微乎其微。因此,她们在训练分类器时,所用的训练数据并不一致,而在测试时所用的数据也不完全一致。因此,她们得到不同的结果是很符合逻辑的。该结果与是否由两个不同的人进行评估毫无关系。即使Lucy自己进行两次10折交叉验证,她得到的结果也会有些不同。之所以不同的原因在于将数据划分到桶这个过程具有随机性。由于10折交叉验证不能保证每次得到相同的结果,因此它是一种非确定性的方法。与此相反,留一法是确定性的。每次应用留一法到同一分类器及同一数据上,得到的结果都一样。这是件好事!

留一法的缺点
留一法的主要不足在于计算的开销很大。考虑一个包含1000个实例的中等规模的数据集,需要一分钟来训练分类器。对于10折交叉验证来说,我们将花费10分钟用于训练。而对于留一法来说,训练时间需要16个小时。如果数据集包含百万样本,那么花费在训练上的总时间将接近两年。我的天哪!

留一法的另一个缺点与分层采样(stratification)有关。

分层采样(Stratification)
回到上一章的例子,即构建分类器来确定女运动员所从事的体育项目(篮球、体操或田径)。当训练分类器时,我们希望训练数据能够具有代表性,并且包含所有3类的数据。假设采用完全随机的方式将数据分配到训练集,则有可能训练集中不包含任何篮球运动员,正因为如此,最终的分类器对篮球运动员分类时效果不佳。或者,考虑构建一个100个运动员的数据集。首先我们去WNBA的网站获得33个女子篮球运动员的信息,然后去维基百科网站获得33名参加2012年奥运会的女子体操运动员的信息,最后我们再次去维基百科网站获得34名参加奥运会田径项目的女运动员的信息。因此,最终我们的数据如下所示:

下面开始做10折交叉验证。我们从上表的第一行开始,每10个人放入一个桶。于是,第一个桶和第二个桶没有任何篮球运动员。第三个桶既有篮球运动员也有体操运动员。第四、第五个桶只包含体操运动员,其余桶的情况可以依此类推。任何一个桶都不能代表整个数据集,你认为上述划分会导致有偏差的结果,这种想法是对的。我们期望的方法是将实例按照其在整个数据集的相同比例分到各个桶中,即桶中的类别比例(篮球运动员、体操运动员、马拉松运动员)和整个数据集中的类别比例是一样的。由于整个数据集的1/3是篮球运动员,因此每个桶中应该包含1/3的篮球运动员。同样,该桶中也应包含1/3的体操运动员和1/3的马拉松运动员。上述做法称为分层采样,是一种好的方法。留一法评估的问题在于测试集中只有一个样本,因此它肯定不是分层采样的结果。总而言之,留一法可能适用于非常小的数据集,到目前为止10折交叉测试是最流行的选择。

《写给程序员的数据挖掘实践指南》——5.2. 10折交叉验证的例子相关推荐

  1. 写给程序员的美术创作指南

    引言 独狼游戏开发工作室日益增多,而他们之中也确实有不少成功者.尽管如此,如果这匹独狼恰巧没点美术技能又该如何呢?本文为独立游戏开发者创造.获得美术资源列出了一些选择. 像素美术 仿佛是从上个世纪 8 ...

  2. 写给程序员的 HR 面试指南,助你踢好面试的临门一脚!

    本文来源:占小狼的博客 首先这个问题是一个骨灰级问题,面试必问,很有必要认真探讨一下这个问题的答案. 个人觉得可以从三方面来考虑回答(寻找新平台提升自己和表现出忠诚度和责任感) 在寻找新机会或新的平台 ...

  3. 写给程序员的裁员防身指南

    戳蓝字"CSDN云计算"关注我们哦! 大家都知道 18 年底许多大公司都开始了「人员优化」动作,不仅仅美团等大厂有所行动,就连一些平时求贤若渴的小公司也有所动作. 本来我以为关于劳 ...

  4. 在Mnist数据上使用k折交叉验证训练,pytorch代码到底怎么写

    前言 最近学到了K折交叉验证,已经迫不及待去实验一下他的效果是不是如老师讲的一样好,特此写下本文. 本文运行环境为:sklearn.pytorch .jupyter notebook k折交叉验证介绍 ...

  5. 面向程序员的数据挖掘指南-----第一章:简介

    内容: 寻找事物 本书结构 阅读完本书后你可以做些什么? 为什么数据挖掘很重要?哪些内容可以为我所用? 标题里的"Numerati的古老艺术"是什么意思? 序 如果你每天都能重复做 ...

  6. c++ 读陈黎娟的《C、C++实践进阶之道,写给程序员的编程书》所感--关于变量的类型与引用

    最近在看陈黎娟的书<C.C++实践进阶之道,写给程序员的编程书>,其中第十一章讲的是变量和类型,现做笔记如下: 数据存储区域分只读数据区(存储常量和恒值,正常情况下不做修改).全局/静态存 ...

  7. 读《面向程序员的数据挖掘指南》读书笔记

    该书推荐的资源:Tom Mitchell<机器学习> 该书最大的特点:实用性很强. 该书最大的缺点是:用嵌套字典来表达复杂的距离关系,显得力不从心,如果用矩阵和向量将会省事很多. 该书最大 ...

  8. 写给程序猿的把妹指南

    写给程序猿的把妹指南:概述篇 每个女人都是一套系统 每个女人,都是一套复杂的系统,只不过,这套系统不是由程序员创造的,而是由大自然进化而成的.大部分程序猿不太懂得如何泡妞,是因为你不熟悉女人这套系统, ...

  9. 再见吧,996!程序员开源考公指南获高赞:三人已成功上岸

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 整理 | 钰莹 转载自公众号:AI前线 近年来,互联网公司 996 ...

最新文章

  1. ASP.NET页面的生命周期
  2. tomcat7+nginx+memcached 配置tomcat 集群以及负载均衡
  3. 【Java】Volitile的作用、JVM规范如何要求内存屏障、硬件层级内存屏障如何帮助java实现高并发 - 第二天笔记
  4. Android之XUtils的框架总结
  5. 如何使用 Microsoft Azure Media Services 现场直播,(Live Streaming) 直播流媒体系统
  6. linux设备驱动之USB主机控制器驱动分析 【转】
  7. 【图像分割】基于matlab分水岭算法图像分割【含Matlab源码 390期】
  8. 罗技Logitech Options下载地址
  9. 直播组装服务器,快速搭建直播服务器
  10. IPv6/IPv4是什么?IPv4和IPv6有什么区别?
  11. MiniDP与HDMI的关系
  12. word打开总是安装解决方法
  13. Jsp显示应用外服务器的图片,jsp显示服务器的绝对路径图片
  14. 路由器找不到拨号服务器,路由器设置宽带拨号无法上网 怎么办?
  15. SpringBoot开发文档二(MD5二次加密)
  16. 从微软下载Windows11操作系统镜像
  17. illustrator字体设计教程 刘兵克Illustratorai字体设计日记
  18. Unreal Engin_画廊制作笔记 _007Fog处理,雾的设置
  19. Java --- Xstream使用
  20. Start Additional NameNode

热门文章

  1. docker搭建私有仓库笔记
  2. Docker容器系列教程(三):jenkins环境搭建与插件安装
  3. 2017 校赛 问题 B: CZJ-Superman
  4. PHP在线支付类集锦(银联支付宝手机支付宝微信等)
  5. $(document).click() 在苹果手机上不能正常运行
  6. 浅谈linux性能调优之六:IO调度算法的选择
  7. 工资计算问题,类似计算某天是一年中的第几天的问题
  8. 修改url 参数_SEO优化设计,如何处理网址的动态参数?
  9. 大数据为什么需要安全分析
  10. pip极速安装指定下载源