什么是过拟合?

对训练集拟合效果很好,对测试集拟合效果比较差,这种情况叫做过拟合。

一 训练集 vs 测试集

在模式识别(pattern recognition)与机器学习(machine learning)的相关研究中,
经常会将数据集分为训练集(training set)跟测试集(testing set)这两个子集,
前者用以建立模型(model),后者则用来评估该模型对未知样本进行预测时的精确度(泛化能力:generalization ability)。

将完整的数据集分为训练集跟测试集,必须遵守如下要点:
1、只有训练集才可以用在模型的训练过程中,测试集则必须在模型完成之后才被用来评估模型优劣的依据。
2、训练集中样本数量必须够多,一般至少大于总样本数的50%。
3、两组子集必须从完整集合中均匀取样。
均匀取样的目的是希望减少训练集/测试集与完整集合之间的偏差(bias),但却也不易做到。
一般的作法是随机取样,当样本数量足够时,便可达到均匀取样的效果,然而随机也正是此作法的盲点,也是经常是可以在数据上做手脚的地方。
当辨识率不理想时,便重新取样一组训练集/ 测试集,直到测试集的识别率满意为止,但严格来说这样便算是作弊了。

二 常见交叉验证CV的方法如下:

交叉验证(Cross Validation)简称为 CV。
CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,
一部分做为训练集(train set),另一部分做为验证集(validation set),
首训练集对分类器进行训练,在利用验证集来测试训练得到的模型(model), 以此来做为评价分类器的性能指标。

2.1 Hold-Out Method(数据集拆分:一般法)

将原始数据随机分为两组,一组做为训练集,一组做为验证集;
利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为此Hold-OutMethod下分类器的性能指标.
此种方法的好处的处理简单,只需随机把原始数据分为两组即可,其实严格意义来说Hold-Out Method并不能算是CV,
因为这种方法没有达到交叉的思想,由于是随机的将原始数据分组,
所以最后验证集分类准确率的高低与原始数据的分组有很大的关系,所以这种方法得到的结果其实并不具有说服性.

2.2 Double Cross Validation(2-fold Cross Validation,记为2-CV)双交叉验证

做法是将数据集分成两个相等大小的子集,进行两回合的分类器训练。
在第一回合中,一个子集作为training set, 另一个便作为testing set;
在第二回合中,则将training set与testing set对换后,再次训练分类器,
而其中我们比较关心的是两次testing sets的辨识率。
不过在实务上2-CV并不常用,主要原因是training set样本数太少,通常不足以代表母体样本的分布,
导致testing阶段辨识率容易出现明显落差。
此外,2-CV中分子集的变异度大,往往无法达到“实 验过程必须可以被复制”的要求。

2.3 K-fold Cross Validation(K-CV) K折交叉验证

将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,
这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标.
K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2.
K-CV可以有效的避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性.

2.4 Leave-One-Out Cross Validation(记为LOO-CV) 留一法交叉验证

如果设原始数据有N个样本,那么LOO-CV就是N-CV,即每个样本单独作为验证集,其余的N-1个样本作为训练集,
所以LOO-CV会得到N个模型,用这N个模型最终的验证集的分类准确率的平均数作为此下LOO-CV分类器的性能指标.
相比于前面的K-CV,LOO-CV有两个明显的优点:
①.每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠。
②.实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。

三 使用Cross-Validation时常犯的错误

由于实验室许多研究都有用到 evolutionary algorithms(EA 改进算法)与 classifiers(分类器),
所使用的 fitness function 中通常都有用到 classifier 的辨识率,然而把cross-validation用错的案例还不少。
前面说过,只有 training data 才可以用于 model 的建构,
所以只有 training data 的辨识率才可以用在 fitness function 中。

EA 是训练过程用来调整 model 最佳参数的方法,所以只有在EA结束演化后, model 参数已经固定了,
这时候才可以使用 test data。
那 EA 跟 cross-validation 要如何搭配呢?
Cross-validation 的本质是用来估测(estimate)某个 classification method 对
一组数据集的 generalization error(泛化误差), 不是用来设计 classifier 的方法。
所以 cross-validation 不能用在 EA的 fitness function 中。
因为与 fitness function 有关的样本都属于 training set,那试问哪些样本才是 testset 呢?
如果某个 fitness function 中用了cross-validation 的 training 或 test 辨识率,
那么这样的实验方法已经不能称为 cross-validation 了。

EA 与 k-CV 正确的搭配方法,是将 dataset 分成 k 等份的 subsets 后,
每次取1份 subset(子集) 作为 testset,其余 k-1 份作为 training set,
并且将该组 trainingset 套用到 EA 的 fitness function 计算中
(至于该 trainingset 如何进一步利用则没有限制)。
因此,正确的 k-CV 会进行共 k 次的 EA 演化,建立 k 个classifiers。
而 k-CV 的 test 辨识率,则是 k 组 testsets 对应到 EA 训练所得的 k 个 classifiers 辨识率之平均值。
交叉

验证目的:防范过拟合

我们把数据集分成训练集、验证集和测试集;

训练集用来估算模型参数,验证集用来选择超参数,测试集用来评估模型效果。

    交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,这种情况成为交叉。将原始数据随机分为两组,一组做为训练集,一组做为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为此Hold-OutMethod下分类器的性能指标.此种方法的好处的处理简单,只需随机把原始数据分为两组即可,其实严格意义来说Hold-Out Method并不能算是CV,因为这种方法没有达到交叉的思想,由于是随机的将原始数据分组,所以最后验证集分类准确率的高低与原始数据的分组有很大的关系,所以这种方法得到的结果其实并不具有说服性。

交叉验证的基本想法是重复地使用数据,把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复地进行训练、测试以及模型选择。

简单交叉验证方法

首先随机地将已给数据分为两部分,一部分作为训练集,一部分作为测试集,然后用训练集在各种条件下训练模型,从而得到不同的模型,在测试集上评估各个模型的测试误差,选出测试误差最小的模型。

K折交叉验证:

首先随机地将已给数据切分为K个互不相关的的大小相同的子集,然后利用K-1个子集的数据训练模型,利用余下的子集测试模型,将这一过程对可能的K中选择重复进行,最后选出K次评测中平均测试误差最小的模型。

留一交叉验证:

K折交叉验证的特殊情形是K=N,N为给定数据集的容量
交叉验证其实就是为了检查模型的泛化行和稳定性,让模型的输出更加可靠。

因为当我们只将训练数据划分一次时,有可能划分的不好,所以模型的结果会有偏差,不可靠。所以,我们可以使用交叉验证。经常使用的是k-fold交叉验证,将数据划分k份,每次用一份做为验证集,其他的k-1份作为训练集来训练k个模型,然后对多个模型的结果取均值就是这个模型的输出。同时,我们还会看一下k的模型的具体输出值,看一下波动是否很大。

在对分类任务进行交叉验证时,还要注意划分是样本类别的分布。python里面有sklearn.model_selection.StratifiedKFold可以处理分类任务的交叉验证。如果用k-fold划分,就有可能训练集和测试集的结果相差很大。因为有可能划分时,有一个块儿里面根本就没有某一类。

以前一直有一个疑惑说,k折交叉验证会有k个模型,那我最后应该选择哪一个模型呢?

现在发现是自己太傻了?‍♀️,交叉验证划分训练集只是为了验证模型的稳定性,并没有说要选择里面的某一个模型。最后,还是要用全部的训练数据去训练模型,然后得出模型的参数。

【机器学习】交叉验证防止过拟合(含义+代码+演示)相关推荐

  1. 交叉验证方法汇总【附代码】(留一法、K折交叉验证、分层交叉验证、对抗验证、时间序列交叉验证)

    目录 交叉验证是什么? 留一验证(LOOCV,Leave one out cross validation ) LOOCC代码 验证集方法 验证集方法代码 K折交叉验证(k-fold cross va ...

  2. R语言使用rpart包构建决策树模型、使用prune函数进行树的剪枝、交叉验证预防过拟合、plotcp可视化复杂度、rpart.plot包可视化决策树、使用table函数计算混淆矩阵评估分类模型性能

    R语言使用rpart包构建决策树模型.使用prune函数进行树的剪枝.使用10折交叉验证选择预测误差最低的树来预防过拟合.plotcp可视化决策树复杂度.rpart.plot包可视化最终决策树.使用t ...

  3. sklearn K折(KFold)交叉验证案例,展开细节代码与cross_validate简写

    文章目录 一.通常的随机森林模型代码 二.K折交叉验证的随机森林代码 1. 切分方式:随机切分 2.切分方式:不均衡数据集下按比例切分 三.KFold的简便写法 四.随机森林预测与KFold交叉验证完 ...

  4. 机器学习——交叉验证(留一法、自助法)

    文章目录 交叉验证的作用 留一法 自助法 交叉验证的作用 很多时候我们都在纠结,交叉验证法到底有啥用???我不用这个咋的?? 交叉验证是一种模型验证技术,可用于评估统计分析(模型)结果在其它独立数据集 ...

  5. 机器学习--- 交叉熵损失(CrossEntropy Loss)--(附代码)

    文章目录 一. Softmax 介绍 1.1 Softmax 的形式 1.2 一些问题 1.2.1 为什么训练阶段需要 Softmax 层?推理阶段通常不使用 Softmax 层? 二.交叉熵损失(C ...

  6. 十折交叉验证pythoniris_python机器学习-交叉验证(cross-vaildation)

    K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一. 所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. kNN算 ...

  7. 机器学习之交叉验证方法详解【基于Scikit-Learn】

    目录: 1 为什么交叉验证 2 交叉验证方法2.1 简单的交叉验证2.2 k折交叉验证 k-fold cross validation2.3 代码 3 留一法 leave-one-out cross ...

  8. 详细介绍机器学习中的交叉验证方法

    机器学习的交叉验证 前言 HoldOut交叉验证 K折交叉验证 分层K折交叉验证 Leave P Out 留一交叉验证 蒙特卡罗交叉验证 时间序列交叉验证 前言 在研究生阶段接触机器学习的时候,我导问 ...

  9. 【机器学习】交叉验证详细解释+10种常见的验证方法具体代码实现+可视化图

    [机器学习]交叉验证详细解释+10种常见的验证方法具体代码实现+可视化图 一.使用背景 由于在训练集上,通过调整参数设置使估计器的性能达到了最佳状态:但在测试集上可能会出现过拟合的情况. 此时,测试集 ...

最新文章

  1. 单片机如何使用?51单片机C语言编程实例有哪些?
  2. 加速ASP程序的显示速度
  3. 数据挖掘讲座:我所知道的一点Data Mining
  4. 在Oracle 11g中用看Oracle的共享内存段---------IPCS
  5. eclipse 设置豆沙绿保护色,保护眼睛
  6. 如何在SAP Fiori应用里使用React component
  7. python如何分成两行_python将文本分每两行一组并保存到文件
  8. java关闭数据库连接语句,java下连接mysql数据库 ——删除语句——delete
  9. arcpy 验证中心点是否位于图层之内
  10. 50 个 jQuery 插件可将你的网站带到另外一个高度 【已翻译100%】
  11. 拓端tecdat|R语言析因设计分析:线性模型中的对比
  12. Vue-条件判断与循环遍历
  13. 资源收集:2020年11月行政区划代码
  14. react 创建组件的两种方式
  15. winhex添加删除字节
  16. 日期:将格林尼治时间(GMT)转化为北京时间
  17. singleSpa记录
  18. PW系列 | 用windres 编译.rc 资源文件
  19. dz论坛php5,S!淘专辑 3.0.1 For php5.2 php5.3版 dz插件分享,淘专辑是用户将喜欢的论坛帖子...
  20. 答案原文及理解解释《解析解释守株待兔死脑筋,旁门左道不正规是什么》什么意思含义

热门文章

  1. Mac九大修图神器你值得拥有,分分钟打造时尚设计大片!
  2. 视频会议租赁与买断模式收费标准
  3. day06-元组字典集合常用两种排序
  4. Day06-元组字典集合%冒泡排序、选择排序
  5. C++斐波那契数列(简短算法)
  6. “测试开发“是什么职位和中文的缺陷
  7. proceedingjoinpoint 获取方法名_王者荣耀:万格改名的秘密,绝版游戏名也能改?...
  8. 惠普HP DeskJet Ink Advantage 4178 一体机驱动
  9. 【Arduino】麦克纳姆轮原理及驱动程序
  10. 【codeforces】【比赛题解】#915 Educational CF Round 36