机器学习中用来防止过拟合的方法有哪些?

是什么

过拟合(overfitting)是指在模型参数拟合过程中的问题,由于训练数据包含抽样误差,训练时,复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合。
具体表现就是最终模型在训练集上效果好;在测试集上效果差。模型泛化能力弱。

为什么

为什么要解决过拟合现象?这是因为我们拟合的模型一般是用来预测未知的结果(不在训练集内),过拟合虽然在训练集上效果好,但是在实际使用时(测试集)效果差。同时,在很多问题上,我们无法穷尽所有状态,不可能将所有情况都包含在训练集上。所以,必须要解决过拟合问题。

为什么在机器学习中比较常见?这是因为机器学习算法为了满足尽可能复杂的任务,其模型的拟合能力一般远远高于问题复杂度,也就是说,机器学习算法有「拟合出正确规则的前提下,进一步拟合噪声」的能力。

而传统的函数拟合问题(如机器人系统辨识),一般都是通过经验、物理、数学等推导出一个含参模型,模型复杂度确定了,只需要调整个别参数即可。模型「无多余能力」拟合噪声。

怎么样

既然过拟合这么讨厌,我们应该怎么防止过拟合呢?最近深度学习比较火,我就以神经网络为例吧:

  1. 获取更多数据

这是解决过拟合最有效的方法,只要给足够多的数据,让模型「看见」尽可能多的「例外情况」,它就会不断修正自己,从而得到更好的结果:

如何获取更多数据,可以有以下几个方法:

从数据源头获取更多数据:这个是容易想到的,例如物体分类,我就再多拍几张照片好了;但是,在很多情况下,大幅增加数据本身就不容易;另外,我们不清楚获取多少数据才算够;
根据当前数据集估计数据分布参数,使用该分布产生更多数据:这个一般不用,因为估计分布参数的过程也会代入抽样误差。
数据增强(Data Augmentation):通过一定规则扩充数据。如在物体分类问题里,物体在图像中的位置、姿态、尺度,整体图片明暗度等都不会影响分类结果。我们就可以通过图像平移、翻转、缩放、切割等手段将数据库成倍扩充;

  1. 使用合适的模型

前面说了,过拟合主要是有两个原因造成的:数据太少+模型太复杂。所以,我们可以通过使用合适复杂度的模型来防止过拟合问题,让其足够拟合真正的规则,同时又不至于拟合太多抽样误差。

(PS:如果能通过物理、数学建模,确定模型复杂度,这是最好的方法,这也就是为什么深度学习这么火的现在,我还坚持说初学者要学掌握传统的建模方法。)

对于神经网络而言,我们可以从以下四个方面来限制网络能力:

2.1 网络结构 Architecture

这个很好理解,减少网络的层数、神经元个数等均可以限制网络的拟合能力;

2.2 训练时间 Early stopping

对于每个神经元而言,其激活函数在不同区间的性能是不同的:

当网络权值较小时,神经元的激活函数工作在线性区,此时神经元的拟合能力较弱(类似线性神经元)。

有了上述共识之后,我们就可以解释为什么限制训练时间(early stopping)有用:因为我们在初始化网络的时候一般都是初始为较小的权值。训练时间越长,部分网络权值可能越大。如果我们在合适时间停止训练,就可以将网络的能力限制在一定范围内。

2.3 限制权值 Weight-decay,也叫正则化(regularization)

原理同上,但是这类方法直接将权值的大小加入到 Cost 里,在训练的时候限制权值变大。以 L2 regularization为例:

训练过程需要降低整体的 Cost,这时候,一方面能降低实际输出与样本之间的误差 [公式] ,也能降低权值大小。

2.4 增加噪声 Noise

给网络加噪声也有很多方法:

2.4.1 在输入中加噪声:

噪声会随着网络传播,按照权值的平方放大,并传播到输出层,对误差 Cost 产生影响。推导直接看 Hinton 的 PPT 吧:

在输入中加高斯噪声,会在输出中生成 [公式] 的干扰项。训练时,减小误差,同时也会对噪声产生的干扰项进行惩罚,达到减小权值的平方的目的,达到与 L2 regularization 类似的效果(对比公式)。

2.4.2 在权值上加噪声

在初始化网络的时候,用0均值的高斯分布作为初始化。Alex Graves 的手写识别 RNN 就是用了这个方法

Graves, Alex, et al. "A novel connectionist system for unconstrained handwriting recognition." IEEE transactions on pattern analysis and machine intelligence 31.5 (2009): 855-868.

  • It may work better, especially in recurrent networks (Hinton)

2.4.3 对网络的响应加噪声

如在前向传播过程中,让默写神经元的输出变为 binary 或 random。显然,这种有点乱来的做法会打乱网络的训练过程,让训练更慢,但据 Hinton 说,在测试集上效果会有显著提升 (But it does significantly better on the test set!)。

  1. 结合多种模型

简而言之,训练多个模型,以每个模型的平均输出作为结果。

从 N 个模型里随机选择一个作为输出的期望误差 [公式] ,会比所有模型的平均输出的误差 [公式] 大(我不知道公式里的圆括号为什么显示不了):

大概基于这个原理,就可以有很多方法了:

3.1 Bagging

简单理解,就是分段函数的概念:用不同的模型拟合不同部分的训练集。以随机森林(Rand Forests)为例,就是训练了一堆互不关联的决策树。但由于训练神经网络本身就需要耗费较多自由,所以一般不单独使用神经网络做Bagging。

3.2 Boosting

既然训练复杂神经网络比较慢,那我们就可以只使用简单的神经网络(层数、神经元数限制等)。通过训练一系列简单的神经网络,加权平均其输出。

3.3 Dropout

这是一个很高效的方法。

在训练时,每次随机(如50%概率)忽略隐层的某些节点;这样,我们相当于随机从2^H个模型中采样选择模型;同时,由于每个网络只见过一个训练数据(每次都是随机的新网络),所以类似 bagging 的做法,这就是我为什么将它分类到「结合多种模型」中;

此外,而不同模型之间权值共享(共同使用这 H 个神经元的连接权值),相当于一种权值正则方法,实际效果比 L2 regularization 更好。

  1. 贝叶斯方法

这部分我还没有想好怎么才能讲得清楚,为了不误导初学者,我就先空着,以后如果想清楚了再更新。当然,这也是防止过拟合的一类重要方法。

综上:

引用自知乎 https://www.zhihu.com/question/59201590

原文地址:https://www.cnblogs.com/superfly123/p/11745341.html

时间: 2024-07-31 18:47:06

机器学习中用来防止过拟合的方法有哪些?的相关文章

机器学习中常见的过拟合解决方法

在机器学习中,我们将模型在训练集上的误差称之为训练误差,又称之为经验误差,在新的数据集(比如测试集)上的误差称之为泛化误差,泛化误差也可以说是在模型在总体样本上的误差.对于一个好的模型应该是经验误差约等于泛化误差,也就是经验误差要收敛于泛化误差,根据霍夫丁不等式可知经验误差在一定条件下是可以收敛于泛化误差的. 当机器学习模型对训练集学习的太好的时候(再学习数据集的通性的时候,也学习了数据集上的特性,这些特性是会影响模型在新的数据集上的表达能力的,也就是泛化能力),此时表现为经验误差很小,当往往此

【机器学习】(3)拟合度与最大似然估计

在大致了解了机器学习的算法分类(监督式.非监督式以及增强学习)和梯度算法后,今天我们来了解下拟合度和最大似然估计的相关问题. 一.最小二乘法的拟合度 监督式学习中一类典型的应用就是回归问题,基本的就是线性回归,即用一条直线去逼近训练集合.最小二乘法就是根据已有的训练集样本来确定拟合度最好的函数 曲线.但是由于选择一个什么样的曲线是人工决定的,而不同的曲线又具有不同的性质,从而导致不同函数模型使用最小二乘法的拟合度是不同的.以一个m个样本 的房屋价格和大小数据M为例,我们可以选择线性回归(用一条直

win2008r2的iis7.5手动建站方法,iis7.5中用独立用户建立网站的方法,提高网站安全性

win2003的iis6手动建站方法,iis6中用独立用户建立网站的方法,提高网站安全性,我们前面的教程有说明,请看http://www.piis.cn/zhishi/web574.asp 现在我们说下在WIN2008R2环境中IIS7.5中手动建立网站并设置网站安全的方法: 设置以上身份验证后,部分服务器可能会出现问题(主要是服务器环境配置或安全设置引起的),使得网站打不开,或提示“未能解密属性“password”,因为密钥集不存在”,那么这个时候我们就要将匿名用户标识从“特定用户”修改为“应

防止过拟合的方法 预测鸾凤花(sklearn)

1. 防止过拟合的方法有哪些? 过拟合(overfitting)是指在模型参数拟合过程中的问题,由于训练数据包含抽样误差,训练时,复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合. 产生过拟合问题的原因大体有两个:训练样本太少或者模型太复杂. 防止过拟合问题的方法: (1)增加训练数据. 考虑增加训练样本的数量 使用数据集估计数据分布参数,使用估计分布参数生成训练样本 使用数据增强 (2)减小模型的复杂度. a.减少网络的层数或者神经元数量.这个很好理解,介绍网络的层数或者神经元的数

Stanford机器学习[第三课]-欠拟合与过拟合

1.本次课程大纲 局部加权回归: 线性回归的变化版本 Probability interpretation:另一种可能的对于线性回归的解释 Logistic回归: 基于2的一个分类算法 感知器算法: 对于3的延伸,简要讲 牛顿方法(用来对logistic进行拟合的算法,这节课没讲) 2.过拟合与欠拟合的距离 评估房子的价格,假设三种拟合算法: (1)X1=size, 拟合出一条线性曲线: (2)x1=size,x2=(size)2,拟合出一条二次曲线: (3)训练集共有7个数据,建立六个特征,拟

机器学习算法中的过拟合与欠拟合

在机器学习表现不佳的原因要么是过度拟合或欠拟合数据. 机器学习中的逼近目标函数过程 监督式机器学习通常理解为逼近一个目标函数(f)(f),此函数映射输入变量(X)到输出变量(Y). Y=f(X)Y=f(X) 这种特性描述可以用于定义分类和预测问题和机器学习算法的领域. 从训练数据中学习目标函数的过程中,我们必须考虑的问题是模型在预测新数据时的泛化性能.泛化好坏是很重要的,因为我们收集到的数据只是样本,其带有噪音并且是不完全的. 机器学习中的泛化 在In机器学习中,我们描述从训练数据学习目标函数的

机器学习实战之 第七章 集成方法(随机森林和 AdaBoost)

第7章 集成方法 ensemble method 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个人的意见. 机器学习处理问题时又何尝不是如此? 这就是集成方法背后的思想. 集成方法: 投票选举(bagging: 自举汇聚法 bootstrap aggregating): 是基于数据随机重抽样分类器构造的方法 再学习(boosting): 是基于

用Python开始机器学习(3:数据拟合与广义线性回归)

机器学习中的预测问题通常分为2类:回归与分类. 简单的说回归就是预测数值,而分类是给数据打上标签归类. 本文讲述如何用Python进行基本的数据拟合,以及如何对拟合结果的误差进行分析. 本例中使用一个2次函数加上随机的扰动来生成500个点,然后尝试用1.2.100次方的多项式对该数据进行拟合.拟合的目的是使得根据训练数据能够拟合出一个多项式函数,这个函数能够很好的拟合现有数据,并且能对未知的数据进行预测. 代码如下: [python] view plain copy import matplot

机器学习-统计学习方法中多项式拟合偏导函数推导

最近在学机器学习,看了Andrew Ng 的公开课,同时学习李航博士的 <统计学习方法>在此记录. 在第十二页有一个关于多项式拟合的问题.此处,作者直接给出了所求的的偏导.这里做一下详细推导. , 此处函数模型的求偏导问题,首先看一下偏导的定义 因为此处是,所以除了Wj 外的Xi,Yi 都可以视作常数.对此求解. 推导后我们会发现所得出的公式与作者给出的答案不同 ,不过作者也给出了更正的勘误 但是我们发现还是和我推导出的答案不同.作者分母下的x上标为j+1,而我推导出的上标为2j,参考作者的勘