你真的了解交叉验证和过拟合吗?

1.过拟合的问题

1.1 过拟合的定义

  开篇首先谈一下机器学习模型的过拟合问题。什么是过拟合?简单来讲,当 train set 误差较小,而 test set 误差较大时,我们即可认为模型过拟合。这句话表达的另一层意思是,模型评估指标的方差(variance)较大,即可认为模型过拟合。另外,无论监督学习还是非监督学习,均存在过拟合的问题。

1.2 如何判断是否过拟合

  一般来讲,判断模型是否过拟合可采用学习曲线(learning curve),通过画学习曲线图可以直观的看出 train set 和 test set 的误差随着训练样本数量(number of training samples)的变化。在学习曲线中,如果训练准确度(training accuracy)和测试准确度(或验证准确度 validation accuracy)两条曲线相距较远,则说明模型的方差较大(一般情况下,训练精度都会高于测试精度),模型过拟合。而我们期望的理想状况是,训练集和测试集的两条精度曲线相距较近,并且随着训练样本数量的增加,越来越近,逐渐收敛。

  当然,还有最简单的判断模型是否过拟合的方法,就是通过training accuracy 和 test accuracy 数值大小,直观的判断模型是否过拟合。例如,训练集的准确率为90%,而测试集的准确率为70%,那么我们可以认为模型过拟合。不过,这种方法没有明确的判断标准,完全靠个人的主观判断——“感觉训练和测试的误差相差有点大,有可能过拟合”。还是刚才的例子,如果测试集的误差为80%,那么我们是否还能下结论模型过拟合呢?这个时候你可以说,训练和测试准确率相差10个百分点,也挺大的,还是有很大可能过拟合的。但是,也有可能,模型的平均误差率在85%左右,在95%的置信度下,模型预测准确率的置信区间恰为 [80%,90%],那么此时模型并没有过拟合。当然,后一种情况出现的概率相对较小,我只是想表达一下,这种直观的判断方法是不一定准确的,不过方便的是,我们不用画学习曲线图啊,多省事。因此,总的来讲,我们可以先通过训练集和测试集准确率的大小,直观的判断模型是否过拟合;当没有把握断定模型是否过拟合时,再借助学习曲线。

1.3 过拟合的原因

  不知道各位有没有听过这样一种说法,就是没有任何一种算法能够完全避免过拟合。其实,我们讨论模型的过拟合,实际上是针对模型的泛化性能进行研究。首先我觉得,模型的泛化能力如何,一方面与模型自身的特性有关,另一方面与所研究的数据也有关。如果我们的数据质量较高,并且呈现出某种特有的“规律”,那么对于新数据,模型具有非常好的泛化能力,那么我们可以说模型不存在任何过拟合问题。但是,理想是饱满的,现实是骨感的。在实际生产环境中,绝对不可能出现质量很高的数据,而数据所蕴含的规律或特性也不是那么容易学习。因此,即便用再高大上的模型,再花多少时间优化模型的超参数和参数,依然很难再提高模型的泛化能力。生活中我们常说一句话:天赋决定上限,努力决定下限。我想套用这句话说:数据决定上限,模型决定下限。

  接下来,我想谈一下机器学习中的一个算法——随机森林。为什么点名道姓要聊它?原因很简单,我们在谈到不同模型的优缺点时,给随机森林贴的标签之一,就是它能有效的避免过拟合。(我看过很多人说的更激进,直接说随机森林不会出现过拟合。)随机森林算法,出自于集成学习算法家族中的bagging,往往是我们解决决策树过拟合问题的有效方案之一。貌似随机森林算法的作者说过随机森林算法不会出现过拟合,也有人说他本意表达的意思是,随着树的增加,测试集的误差不会增大,而是趋于收敛;同时,看到有人说随机森林在噪声较大的数据集上依然会表现出过拟合(这就是我前面说的数据的影响,不能把数据的锅甩给模型啊)。我自己在使用过程中发现,当随机森林树的棵树较少时,例如sklearn中默认的10棵,这种情况,模型的方差依然会很大。所以用随机森林时,可以将树的数量设置多一些(R语言中随机森林默认好像是100棵树),不过树太多的话,模型训练时间长、对于计算资源的占用较大。

  网上有很多关于随机森林是否会产生过拟合的激烈讨论,这里也分享我在知乎上看到的一个帖子:https://www.zhihu.com/question/23578594 。最后,对于随机森林是否会产生过拟合的问题,总结一句:随机森林能有效的避免过拟合,但如果数据质量较差(例如噪声较大),那么模型的泛化能力也会受到很大影响。(貌似这样说才不显得那么武断。。)

  最后总结一下,导致过拟合的原因大概有以下几点:

  - 模型复杂度过高

  - 训练数据过少

  - 数据噪声较大

2.交叉验证

  通过对过拟合的讨论之后,我们在运用机器学习算法模型时,要考虑两个问题:(1) 如何验证模型是否过拟合?(2) 如何避免过拟合?

  关于如何验证模型是否过拟合,上一节已经简单讨论。接下来想针对python机器学习算法模块sklearn中交叉验证相关函数的使用加以说明。

2.1 cross_validate 与 cross_val_score

  这两个函数的区别是,cross_validate允许指定多个指标进行评估,同时,它还可以显示交叉验证训练集的评估score,而cross_val_score只能显示测试集的score。当我们需要直观判断模型是否过拟合时,可以采用 cross_validate 观察训练和测试集评估score相差的大小。而cross_val_score可以用作对模型性能的综合评估。

2.2 如何利用交叉验证避免过拟合?

  避免模型过拟合的方法,总结大概以下几点:

  - 重新清洗数据(删除稀疏特征、对噪声数据进行处理(删除/替换))

  - 重新采样(改变采样方法等)

  - 增加训练数据

  - 采用交叉验证训练模型

  - 重新筛选特征

  - 降低模型复杂度(增加正则项:L1,L2)

  - dropout(神经网络中,让神经元一定的概率不工作)

  本文主要探讨一下如何利用交叉验证来避免模型过拟合。

  首先,我们要明确一下交叉验证的作用是什么,什么场景下会用到交叉验证。

  第一个作用就是对模型的性能进行评估。当我们通过一次划分样本对模型进行训练和测试时,由于样本划分的偶然性,会导致我们对模型的评估不准确。因此,可以采用交叉验证对模型进行评估(一般采用5折或10折,sklearn默认采用的是3折),以 n 折交叉验证结果的均值,作为模型的性能评估。

  第二个作用就是用来避免过拟合。例如当我们进行10折交叉验证时,训练了10次,得到了10个模型,每个模型的参数也是不同的,那么我们究竟用哪个模型作为我们最终的模型呢?答案是:一个都不用!我们要利用全量数据重新训练出一个最终模型!

  如果你觉得有点迷糊的话不用急,我们一起来梳理一下。我们训练模型是为了什么?是为了确定模型中的参数,例如多元回归模型的系数、神经网络各神经元的权重等。但是,有些模型除了参数还有超参数,例如KNN和KMeans的k值,支持向量机的C值,这些超参数是需要人为设定,没有办法让模型自己学习得到,我们只能通过经验或者多次训练比较,主观设定一个我们认为相对最优的值。而交叉验证的作用,就是让我们进行多次的模型训练比较。例如,我们期望从 [ 1, 10, 100, 1000 ] 这几个值中选择一个最优值,作为支持向量机的C值。那么我们就得分别用这4个值进行10折交叉验证(该过程经历了40次模型的训练测试),把每一次交叉验证结果的均值进行比较,从而选择出一个最优值。最优值选出来了,那么模型的超参数确定了,接下来,利用全量的数据(不要划分训练集测试集,而是用全部的数据)进行模型训练,训练出来的模型才是我们的最终模型。在此过程中可以看出,交叉验证帮助我们确定模型的超参数。这样训练出来的模型,是经过多次综合比较得出的相对最优模型,在一定程度上可以避免过拟合的问题,这就是为什么我们会说交叉验证可以避免过拟合。

  关于交叉验证和过拟合的问题,我就先谈这么多吧。(对于文章中表达的观点,欢迎指正与补充,谢谢。)

转载于:https://www.cnblogs.com/solong1989/p/9415606.html

【机器学习】交叉验证防止过拟合(含义+代码+演示) 训练集 vs 测试集 在模式识别(pattern recognition)机器学习(machine learning)的相关研究中, 经常会将数据集分为训练集(training set)跟测试集(testing set)这两个子集, 前者用以建立模型(model),后者则用来评估该模型对未知样本进行预测时的精确度(泛化能力:generalization ability)。 将完整的数据集分为... 阅读详情

相关推荐

交叉验证(Cross-Validation)

今天我们就来详细了解一下 "交叉验证" 这个概念! 首先来看一下,什么是交叉验证交叉验证,是我们在学习机器学习建模中经常能遇到的一种方法。顾名思义,它就是通过"交叉" (将原始数据拆分成多种不同数据组合)的方式对模型对象进行 "验证" (精确度评估:损失函数,方差,偏差)的处理工具。 交叉验证(Cross-validation)主要用于建模应用中,例如PCR 、PLS 回归建模中。在给...

weixin_42077402的博客 1万+

过拟合、验证集、交叉验证

选出合适的模型(超参数)后,可以把训练验证集合并起来,在上面重新把模型训练一遍,得到最终模型,然后再用测试集测试其泛化能力。(训练集=子训练集+验证集),训练集里的噪音验证集也一并继承,所以你有时可能会发现这样一种情况:训练验证集准确率都非常高(90%以上),测试集却低得惊掉下巴。方式:数据集需要划分成训练集、验证集、测试集三部分,训练验证集的划分采用N折交叉的方式。调整模型参数,训练集,调整超参数,验证集,测试集最终评估。多一种参数调节,多一种验证集,不调超参数就不用验证集。

weixin_41677138的博客 1462

快速了解机器学习中的交叉验证(简单易懂)

在机器学习中,我们通常将数据集分成训练测试集。我们使用训练集来训练模型,并在测试集上进行评估。然而,这种方法存在一个问题:我们可能会偶然地选择一个特别适合测试集的模型,但在实际应用中却表现不佳。这种现象被称为“过拟合”。交叉验证通过重复使用数据集来解决这个问题。它将数据集分成 k 个折叠,每个折叠都会被用作一次测试集。然后我们使用剩下的 k-1 个折叠作为训练集来训练模型,并在每个折叠上进行评估。最终,我们将所有 k 次评估的结果平均,得到最终的模型性能评估。

AI_dataloads的博客 5175

深度网络的过拟合问题讨论

1.问题背景 最近在做深度学习实验的时候,遇到了一个棘手的问题,就是大家熟知的“过拟合”,直观的表现在图中。分析来说就是在拟合训练集的时候可以很好的实现深层网络,损失小,准确率高(我这里可以达到99.99%)。然而,测试集的损失非常大,准确性在相对较低的范围内波动(在我的情况下为70%-80%)。并非如文中所述,测试集的损失随着迭代次数的增加而减少,而是精度随着迭代次数的增加而增加。 如果你看不出上图有什么问题,我就放一张理想状态下的结果图来对比一下(如下图粗线所示),不过大概意思在那里。随着迭代次

黄佳俊的博客 1674

方差偏差来分析:深度学习中的过拟合、欠拟合

偏差方差的定义介绍:https://mp.csdn.net/postedit/80414998假设一个识别狗算法分类器:1.   过拟合    训练集错误率:1%    测试集错误率:15%    偏差为:1%    方差为:15%-1%=14%    总误差为  15%    虽然分类器训练误差非常低,但是没能成功泛化到测试集。这叫做过拟合。2.欠拟合     训练集错误率:15%     测...

donkey_1993的博客 6496

机器学习:网格搜索交叉验证

一、网格搜索 1. 超参数的定义 在机器学习中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。 比如在使用梯度下降法的神经网络中,学习率alpha就是一个超参数。 通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能效果。 2.什么是网格搜索 了解了超参数的定义,网格搜索就可以很容易理解。 简单来讲,网格搜索是一种调参手段,一般是调超参数。它利用的是一种十分简单暴力的方法:穷举搜索。在所有候选的参数选择中,通过循环变脸,尝试每一种可能性,表现最好的参数就是

JacksonKim的博客 1万+

Python实现:Hold-Out、k折交叉验证、分层k折交叉验证、留一交叉验证

  模型在统计中是极其重要的,可以通过模型来描述数据集的内在关系,了解数据的内在关系有助于对未来进行预测。一个模型可以通过设置不同的参数来描述不同的数据集,有的参数需要根据数据集估计,有的参数需要人为设定(超参数);一个数据集也可以通过多个多个模型进行描述,不能说哪个模型是最好的,其他模型都是不可取的。 数据集可以看做变量的具体实现,描述数据集的内在关系,实则是描述变量之间关系,进而对我们感兴趣...

Explore 6528

机器学习中的交叉验证:用于评估模型性能,防止过拟合

随着机器学习领域的不断发展,交叉验证将继续发挥重要作用,为我们提供强大的工具来评估模型性能,提高模型的质量稳定性,推动机器学习技术的进步应用的拓展。本文将介绍机器学习中的交叉验证技术,探讨其原理、应用优势,帮助读者更好地理解运用交叉验证来评估模型性能,提高模型的泛化能力,从而更好地适应未知数据。k折交叉验证:k折交叉验证将数据集均分为k个子集,每次将其中一个子集作为验证集,其余k-1个子集作为训练集,进行k次训练评估,最终得到模型性能的评估结果。二、交叉验证在评估模型性能中的应用。

2259

避免过拟合:一些有效的模型选择交叉验证技巧

1.背景介绍 在机器学习数据挖掘领域,过拟合是一个常见的问题,它发生在模型在训练数据上表现出色,但在新的、未见过的数据上表现很差的情况下。过拟合会导致模型在实际应用中的泛化能力大大降低,从而影响其预测分类能力。因此,避免过拟合至关重要。本文将讨论一些有效的模型选择交叉验证技巧,以帮助读者避免过拟合并提高模型的泛化能力。 2.核心概念联系 在进入具体的方法技巧之前,我们首先需要了解一...

AI天才研究院 876

特征缩放、交叉验证法、过拟合、正则化

特指缩放、交叉验证法、过拟合、正则化特征缩放交叉验证过拟合(Overfitting)正则化(Regularized) 特征缩放        可以看到上面的例子,当数据不一致时,即类型单位不一致时,会造成画的图像取的单元格大小相差很大,使用梯度下降法寻找全局最小值时的效果就不尽人意,所以为了解决这个问题,最好对数据进行处理,即进行数据的特征缩放,特征...

weixin_44831924的博客 769

一文带您了解什么是大模型中的过拟合以及出现过拟合后的应对策略

过拟合是机器学习中模型在训练数据上表现优异但泛化能力差的现象,表现为模型过度记忆训练数据中的噪声而非学习通用规律。常见于模型复杂度过高、数据量不足或噪声多、训练时间过长等情况。检测方法包括分析学习曲线、交叉验证对比简单模型表现。解决方案主要有:简化模型结构、使用正则化技术、数据增强、早停法集成学习。实际应用中需平衡模型复杂度数据质量,并结合业务场景采取针对性措施。

liwenxiang629的博客 2100

如何判断欠拟合、适度拟合、过拟合

可以通过查看训练集误差验证集误差,从而判断算法达到什么效果。通过衡量训练验证集的误差就可以得出不同结论。 1.欠拟合: 假定训练集误差是 15%,验证集误差是 16%。这样则说明算法并没有在训练集中得到很好的训练,如果训练集数据的拟合度不高,就是数据欠拟合,就可以说这种算法偏差比较高。也就是我们说的没有训练好。 相反,它对于验证集产生的结果是合理的,验证集中的错误率只比训练集的多了 1%,所...

GL3_24的博客 1万+

SIMCA的OPLS-DA相关

转自阿趣代谢微信公众号 1. 去除离群值后新做的PCA分析还有很多样本离群,这种情况正常吗? 正常,因为样本本身并不是独立的关系,存在组间差异组内差异。 2.OPLS-DA中score图t旁边的数字说是权重,是什么的权重?有什么含义? t[1]是针对预测主成分(横坐标)的回归系数权重大小;t[2]是针对正交主成分(纵坐标)的回归系数权重大小。 3.做三组之间的OPLS-DA时,3D图有的数据拟合...

未央的博客 4万+

过拟合交叉验证验证集

过拟合 所谓过拟合,指的是模型在训练集上表现的很好,但是在交叉验证集合测试集上表现一般,也就是说模型对未知样本的预测表现一般,泛化(generalization)能力较差。 从图中可以看出,图一是欠拟合,模型不能很好地拟合数据;图二是最佳的情况;图三就是过拟合,采用了很复杂的模型。最后导致曲线波动很大,最后最可能出现的结果就是模型对于未知样本的预测效果很差。 在机器学习算法中,我们常常将原始数...

你的过儿 1324

模型优化学习笔记—欠拟合过拟合

1、欠拟合:对训练准确率很低。对测试集准确率很低,但训练准确率相差不大。2、过拟合:对训练集准率相当高。对测试集准确率很低。此时学习了训练集中的一些非泛化的独有特征。3、既欠拟合,又过拟合:对训练准确率很低,对测试集准确率很低,并且测试集准确率训练准确率相差也较大。注意:当训练准确率99%,测试集准确率99%,你有必要怀疑你是否将测试样本参训练,或者训练测试集样本有重合。

文盲青年的博客 594

吴恩达 - 第六周 - 笔记

转自:https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes/blob/master/markdown/week6.md 第6周 第6周 十、应用机器学习的建议(Advice for Applying Machine Learning) 10.1 决定下一步做什么 10.2 评估一个假设 10.3 模型选择交叉验证集 10.4 诊断偏...

Xieisabug 916

什么是过拟合

但是,也有可能,模型的平均误差率在85%左右,在95%的置信度下,模型预测准确率的置信区间恰为 [80%,90%],那么此时模型并没有过拟合。当然,后一种情况出现的概率相对较小,我只是想表达一下,这种直观的判断方法是不一定准确的,不过方便的是,我们不用画学习曲线图啊,多省事。但是,有些模型除了参数还有超参数,例如KNNKMeans的k值,支持向量机的C值,这些超参数是需要人为设定,没有办法让模型自己学习得到,我们只能通过经验或者多次训练比较,主观设定一个我们认为相对最优的值。在此过程中可以看出,

hellozhxy的博客 3829

第二章 模型评估选择

2.1 经验误差过拟合 错误率(error rate) 精度(accuracy)= 1 - 错误率 误差(error):指期望误差,预测值真实值之间的差异 训练误差(training error)或经验误差(empirical error) 泛化误差(generalization error) 在新样本上表现很好的学习器 过拟合(overfitting):学习能力过于强大

zglzgll的博客 775
上一篇: cratedb geo 查询
下一篇: python文件操作
weixin_34414650
博客等级 码龄10年 5551粉丝 683原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值