10折交叉验证我们构建一个分类器,输入为运动员的身高、体重,输出为其从事的体育项目-体操、田径或篮球。
一旦构建了分类器,我们就可能有兴趣回答类似下述的问题:
1. 该分类器的精确率怎么样?
2. 该分类器到底有多好?
3. 和其他分类器相比较,该分类器表现如何?
我们把每个数据集分成两个子集- 一个用于构建分类器,该数据集称为训练集(training set)- 另一个数据集用于评估分类器,该数据集称为测试集(test set)训练集和测试集是数据挖掘中的常用术语。下面以近邻算法为例来解释为什么不能使用训练数据来测试。如果上述例子中的篮球运动员Marissa Coleman在训练数据中存在,那么身高6英尺1英寸体重160磅的她就会与自己最近。因此,如果对近邻算法进行评估时,若测试集是训练数据的子集,那么精确率总是接近于100%。更一般地,在评估任意数据挖掘算法时,如果测试集是训练数据的子集,那么结果就会十分乐观并且过度乐观。因此,这种做法看起来并不好。那么我们将数据集分成两部分。较大的那部分用于训练,较小的那部分用于评估。事实表明这种做法也存在问题。在进行数据划分时可能会极端不走运。例如,所有测试集中的篮球运动员都比较矮(像Debbie Black的身高只有5英尺3英寸,体重只有124磅),他们会被分成马拉松运动员。而测试集中所有的田径运动员就像Tatyana Petrova(俄罗斯马拉松运动员,身高5英尺3英寸,体重108磅)一样较矮、体重较轻,可能会被分成体操运动员。如果测试集像上面一样,分类器的精确率会很差。另一方面,有时候测试集的选择又会十分幸运。测试集中的每个人都有所从事项目的标准身高和体重,此时分类器精确率接近100%。两种情况下,精确率都依赖于单个的测试集,并且该测试集可能并不能反映分类器应用于新数据的真实精确率。上述问题的一种解决方法是重复多次上述过程并对结果求平均。例如,我们可以将数据分成两半:Part 1和Part 2。

我们可以使用Part 1的数据来训练分类器,而利用Part 2的数据对分类器进行测试。然后,我们重复上述过程,这次用Part 2训练而用Part 1测试。最后我们将两次的结果进行平均。但是,这种方法的问题在于我们每次只使用了一半数据进行训练。然而,我们可以通过增加划分的份数来解决这个问题。例如,我们可以将数据划分成3部分,每次利用2/3的数据训练而在其余1/3的数据上进行测试。因此,整个过程看起来如下:

第一次迭代 使用Part 1和Part 2训练,使用Part 3测试

第二次迭代 使用Part 1和Part 3训练,使用Part 2测试

第三次迭代 使用Part 2和Part 3训练,使用Part 1测试

对上述结果求平均。

在数据挖掘中,最常用的划分数目是10,这种方法称为……

10折交叉验证(10-fold Cross Validation)

使用这种方法,我们将数据集随机分成10份,使用其中9份进行训练而将另外1份用作测试。该过程可以重复10次,每次使用的测试数据不同。

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%的数据来训练分类器。

有个问题
如果10折交叉验证之所以好只是因为采用了90%数据的话
那么为什么不用n折交叉验证?(n是数据集中样本的数目)例如,如果数据集中包含1000个样本,我们可以在999个样本上训练分类器
然后在另外一个样本上测试分类器,这个过程可以重复1000次
利用这种最大可能的交叉验证次数,可能会得到更精确的分类器

1|0留一法(Leave-One-Out)

在机器学习领域,n折交叉验证(n是数据集中样本的数目)被称为留一法。我们已经提到,留一法的一个优点是每次迭代中都使用了最大可能数目的样本来训练。另一个优点是该方法具有确定性。确定性的含义假设Lucy集中花费了80个小时来编写一个新分类器的代码。现在是周五,她已经筋疲力尽,于是她请她的两个同事(Emily和Li)在周末对分类器进行评估。她将分类器和相同的数据集交给每个人,请她们做10折交叉验证。周一,她问两人的结果……嗯,她们得到了不同的结果。她们俩可能是谁犯错了吗?未必如此。在10折交叉验证中,我们随机将数据分到桶中。由于随机因素的存在,有可能Emily和Li的数据划分结果并不完全一致。实际上,她们划分一致的可能性微乎其微。因此,她们在训练分类器时,所用的训练数据并不一致,而在测试时所用的数据也不完全一致。因此,她们得到不同的结果是很符合逻辑的。该结果与是否由两个不同的人进行评估毫无关系。即使Lucy自己进行两次10折交叉验证,她得到的结果也会有些不同。之所以不同的原因在于将数据划分到桶这个过程具有随机性。由于10折交叉验证不能保证每次得到相同的结果,因此它是一种非确定性的方法。与此相反,留一法是确定性的。每次应用留一法到同一分类器及同一数据上,得到的结果都一样。这是件好事!

1|1留一法的缺点

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

2|0分层采样(Stratification)

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

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

__EOF__

作  者:Conan
出  处:https://www.cnblogs.com/BlameKidd/p/9735102.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!

标签: 小知识点总结

好文要顶 关注我 收藏该文  

Conan_1996
关注 - 64
粉丝 - 91

+加关注

0

0

请先登录

« 上一篇:Frobenius norm(Frobenius 范数)
» 下一篇:百度网盘满速下载器:pandownload

posted @ 2018-10-01 17:31 Conan_1996 阅读(2658) 评论(0) 编辑 收藏

刷新评论刷新页面返回顶部

注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。

10折交叉验证(10-fold Cross Validation)与留一法(Leave-One-Out)、分层采样(Stratification)

Copyright ©2019 Conan_1996 

【事实并非理所当然❤️世界总是欲盖弥彰】

【❤️ 认清了生活的真相后还依然热爱它 ❤️】

This blog has running : 290 d 13 h 32 m 57 sღゝ◡╹)ノ♡

- Theme Authors:菜花君° -

简单易懂的10折交叉法相关推荐

  1. R语言caret包构建xgboost模型实战:特征工程(连续数据离散化、因子化、无用特征删除)、配置模型参数(随机超参数寻优、10折交叉验证)并训练模型

    R语言caret包构建xgboost模型实战:特征工程(连续数据离散化.因子化.无用特征删除).配置模型参数(随机超参数寻优.10折交叉验证)并训练模型 目录

  2. matlab.10折交叉验证

    clc clear all % 导入数据 data = load('F:\work_matlab\Matlab\wdbc.txt'); [data_r, data_c] = size(data); % ...

  3. 机器学习 - 随机森林手动10 折交叉验证

    随机森林的 10 折交叉验证 再回到之前的随机森林(希望还没忘记,机器学习算法-随机森林初探(1)) library(randomForest) set.seed(304) rf1000 <- ...

  4. 10折交叉验证(10-fold Cross Validation)与留一法(Leave-One-Out)、分层采样(Stratification)

    10折交叉验证我们构建一个分类器,输入为运动员的身高.体重,输出为其从事的体育项目-体操.田径或篮球. 一旦构建了分类器,我们就可能有兴趣回答类似下述的问题: 1. 该分类器的精确率怎么样? 2. 该 ...

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

    本节书摘来自异步社区出版社<写给程序员的数据挖掘实践指南>一书中的第5章,第5.2节,作者:[美]Ron Zacharski(扎哈尔斯基),更多章节内容可以访问云栖社区"异步社区 ...

  6. 《机器学习》课后习题 3.4 选择两个 UCI 数据集,比较 10 折交叉验证法和留 法所估计出的对率回归的错误率.

    参考了han同学的答案,数据集也可在han同学的github上下载. 3.4 选择两个 UCI 数据集,比较 10 折交叉验证法和留 法所估计出的对率回归的错误率. import numpy as n ...

  7. 10折交叉验证(10-fold Cross Validation)与留一法(Leave-One-Out)、分层采样(Stratification)...

    10折交叉验证 我们构建一个分类器,输入为运动员的身高.体重,输出为其从事的体育项目-体操.田径或篮球. 一旦构建了分类器,我们就可能有兴趣回答类似下述的问题: 1. 该分类器的精确率怎么样? 2. ...

  8. 商店销售某一商品,每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,一次购10件以上者,还可以享受9.8折优惠。现已知当天3个销货员的销售情况为

    商店销售某一商品,每天公布统一的折扣(discount).同时允许销售人员在销售时灵活掌握售价(price),在此基础上,一次购10件以上者,还可以享受9.8折优惠.现已知当天3个销货员的销售情况为 ...

  9. 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集

    机器学习 数据挖掘 数据集划分 训练集 验证集 测试集 Q:如何将数据集划分为测试数据集和训练数据集? A:three ways: 1.像sklearn一样,提供一个将数据集切分成训练集和测试集的函数 ...

最新文章

  1. java cancel_Java RunnableFuture.cancel方法代码示例
  2. 检索数据_21_处理空值的排序
  3. 装饰器前奏2(2017年8月23日 11:50:39)(2017年8月29日 16:07:32)
  4. 微软对外开放更多软件技底层代码术文档
  5. Java微信公众号开发-外网映射工具配置 - 星星满天 - 博客园
  6. P4762-[CERC2014]Virus synthesis【PAM,dp】
  7. 项目经理如何把工作简单化
  8. 京瓷m5021cdn如何设置扫描_京瓷产品让您轻松应对潮湿天气
  9. KuaiRec | 快手发布首个稠密度高达99%的推荐数据集, 可用于多种推荐系统方向研究...
  10. 看我发现了什么好东西? Java Optional,绝对值得一学 | 原力计划
  11. php 开启memcache,php开启与安装 memcache
  12. [原]批量生成AWR报告
  13. maven集成tomcat插件启动报错
  14. 无名小站超雅虎奇摩成台湾第一大网站
  15. 【自动驾驶】KITTI Road Detection Benchmark Devkit_road使用
  16. win2003 R2 SP2 x64 可用密钥
  17. 中国(西部)云计算中心投产,将成西部规模最大数据中心
  18. js将 一串数字1403149534转换为日期格式
  19. LTE学习-OFDM
  20. vxWorks系统ps2键盘,tty设备,vga设备的联系

热门文章

  1. 斐波那契数列求和——C语言(小白版)
  2. Python一行代码搞定炫酷可视化,Cufflinks值得拥有 !
  3. 《Filter Pruning using Hierarchical Group Sparse》ICPR2020论文详解
  4. opencv中puttext()函数的使用
  5. 华为鸿蒙P10plus,华为P10 Plus全面评测 华为P10 Plus值不值得买
  6. 透过协议看PCIe ASPM L1.2
  7. rstp要点2:桥优先级为什么是4096的倍数?
  8. ACA云原生3阿里云容器产品体系
  9. 如何快速搭建红队练习靶场
  10. Qt SQL:QSqlField、QSqlRecord、QSqlIndex、QSqlError