1.什么是过拟合?

对于数据挖掘或者机器学习建立的模型model来说,该模型在训练集上的表现性能较好,而在测试集上效果很差,也就是说该模型的泛化能力差,我们就称之为过拟合(overfitting)。

2.问题延伸

2.1 什么是欠拟合(underfitting)?什么是合适拟合
我们建立的模型实质上就是复杂函数f(x)
x ----输入----> f(x) ----输出----> y_
拟合的函数和训练集误差较大,我们称这种情况为欠拟合
拟合的函数和训练集误差较小,我们称这种情况为合适拟合
同理,拟合的函数和训练集完美的匹配(训练集误差非常非常的小),我们称之为过拟合。

欠拟合

合适拟合

过拟合

2.2 如何解决欠拟合?
欠拟合问题,根本原因是特征维度过少,导致拟合的函数无法满足训练集,误差较大。
我们可以通过增加特征维度来解决

3.为什么要解决过拟合问题

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

为什么机器学习中比较常见过拟合问题?
因为机器学习算法是为了满足尽可能复杂的任务,其模型的拟合能力一般远远高于问题的复杂度,也就是说,机器学习算法有拟合出正确规则前提下,进一步拟合噪声的能力
而传统的函数拟合问题(例如机器人系统辨识),一般是经过经验,物理和数学等推导出一个含参模型,模型的复杂度确定了,只需要调整个别参数就可以,这样的模型没有多余的能力拟合噪声。

4.过拟合产生的原因:

(1)训练数据量不足
(2)训练参数的增多
(3)模型学习能力过于强大(由学习算法和数据内涵共同决定)
(4)其他…

5.防止过拟合的方法

(1)数据扩增,这是解决过拟合最有效的方法,但是对于算法工程师来说,目前的数据是固定不变的,不应该从这里下手收集更多数据,而是找其他方法。

为什么说数据扩增越多越好?
因为有这样一个假设,训练的数据和将来测试的数据是独立同分布的(或者近似),因此当前训练的数据越多,模型对未来数据预测越准确。

数据扩增方法:

  • 从数据源头采集更多数据
  • 复制原有数据+随机噪声
  • 重采样
  • 根据当前数据集估计分布参数,使用该分布产生更多数据等
  • 数据增强
    数据增强,例如,在图像处理中:
    图像平移:学习平以不变的特征
    图像旋转:学习旋转不变的特征,图片目标中的姿态
    图像亮度变化、裁剪、缩放、图像模糊等
    还有mixup(https://www.jianshu.com/p/97aafe479fa1)
    还不是很了解,有待进一步学习。

(2)选择合适的模型其实过拟合最主要的2个原因是:数据太少+模型太复杂,前面提到数据很难再去收集了,但是我们可以选择合适复杂度的模型来防止过拟合问题。
对于神经网络来说,我们可以从以下几个方面来限制网络的拟合能力,从而防止过拟合:

  • 网络结构 Architecture(减少网络层、神经元个数):减少网络的层数、神经元数等可以限制网络的拟合能力,优化模型,从而防止过拟合
  • 训练时间 Early stopping(提前终止):对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient Descent)学习算法。Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。Early stopping方法的具体做法是,在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data的accuracy,当accuracy不再提高时,就停止训练。这种做法很符合直观感受,因为accurary都不再提高了,在继续训练也是无益的,只会提高训练的时间。那么该做法的一个重点便是怎样才认为validation accurary不再提高了呢?并不是说validation accuracy一降下来便认为不再提高了,因为可能经过这个Epoch后,accuracy降低了,但是随后的Epoch又让accuracy又上去了,所以不能根据一两次的连续降低就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30……
  • 限制权值/权重衰减 weight-decay,也叫**正则化(regularization)**【我们放在后面的大类中讲述】
  • 增加噪声 Noise:
    例如,
    在输入中增加噪声,噪声会随着网络传播,按照权值的平方放大,并传播到输出层,对误差 Cost 产生影响
    (参考:https://www.cnblogs.com/anitinaj/p/10025034.html)
    在权值上增加噪声,在初始化网络的时候,用 0 均值的高斯分布作为初始化。
    对网络的响应加噪声,如在前向传播过程中,让默写神经元的输出变为 binary 或 random。显然,这种有点乱来的做法会打乱网络的训练过程,让训练更慢,但据 Hinton 说,在测试集上效果会有显著提升 (But it does significantly better on the test set!)。

(3)正则化方法(regularization):
正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项,一般有L1正则与L2正则等。

  • L1正则

  • L2正则

  • 总结
    正则项是为了降低模型的复杂度,从而避免模型区过分拟合训练数据,包括噪声与异常点(outliers)。从另一个角度上来讲,正则化即是假设模型参数服从先验概率,即为模型参数添加先验,只是不同的正则化方式的先验分布是不一样的。这样就规定了参数的分布,使得模型的复杂度降低(试想一下,限定条件多了,是不是模型的复杂度降低了呢),这样模型对于噪声与异常点的抗干扰性的能力增强,从而提高模型的泛化能力。还有个解释便是,从贝叶斯学派来看:加了先验,在数据少的时候,先验知识可以防止过拟合;从频率学派来看:正则项限定了参数的取值,从而提高了模型的稳定性,而稳定性强的模型不会过拟合,即控制模型空间。
      另外一个角度,过拟合从直观上理解便是,在对训练数据进行拟合时,需要照顾到每个点,从而使得拟合函数波动性非常大,即方差大。在某些小区间里,函数值的变化性很剧烈,意味着函数在某些小区间里的导数值的绝对值非常大,由于自变量的值在给定的训练数据集中的一定的,因此只有系数足够大,才能保证导数的绝对值足够大。如下图(引用知乎):

    另外一个解释,规则化项的引入,在训练(最小化cost)的过程中,当某一维的特征所对应的权重过大时,而此时模型的预测和真实数据之间距离很小,通过规则化项就可以使整体的cost取较大的值,从而,在训练的过程中避免了去选择那些某一维(或几维)特征的权重过大的情况,即过分依赖某一维(或几维)的特征(引用知乎)。
    (以上来自 :https://blog.csdn.net/heyongluoyao8/article/details/49429629 )

延伸:L1正则和L2正则的区别?(后面博文讲述)
L0范数?
svm中引进松弛变量?

3)Dropout
L1、L2正则是通过在代价函数后面加上正则项来防止模型过拟合的。而在神经网络中,有一种方法是通过修改神经网络本身结构来实现的,其名为Dropout。该方法是在对网络进行训练时用一种技巧(trick),对于如下所示的三层人工神经网络:

假设我们要训练上图这个网络,在训练开始时,我们随机地“删除”一些(1/2、1/3等)的隐层单元,视它们为不存在,同时保持输入层与输出层神经元的个数不变,得到如下的网络:


按照BP算法更新上图神经网络中的权值(虚线连接的单元不更新,因为它们被“临时删除”了)。
以上就是一次迭代的过程,在第二次迭代中,也用同样的方法,只不过这次删除的那一些隐层单元,跟上一次删除掉的肯定是不一样的,因为我们每一次迭代都是“随机”地去删掉一些。第三次、第四次……都是这样,直至训练结束。
以上就是Dropout。
它为什么有助于防止过拟合呢
可以简单地这样解释,运用了dropout的训练过程,相当于训练了很多个只有半数(删除一半,1/2情况)隐层单元的神经网络(后面简称为“半数网络”),每一个这样的半数网络,都可以给出一个分类结果,这些结果有的是正确的,有的是错误的。随着训练的进行,大部分半数网络都可以给出正确的分类结果,那么少数的错误分类结果就不会对最终结果造成大的影响。

注:还有其他的一些方法,例如,贝叶斯方法,我还在学习中,努力吧。

参考和引用:

吴恩达机器学习教学视频,以及一些优质的博文

https://www.jianshu.com/p/090dc626d00f

http://blog.sina.com.cn/s/blog_13eacc8800102yk05.html

https://www.jianshu.com/p/97aafe479fa1

https://blog.csdn.net/heyongluoyao8/article/details/49429629

https://www.jianshu.com/p/0a6ac483b950

https://www.cnblogs.com/anitinaj/p/10025034.html

https://www.zhihu.com/question/59201590/answer/167392763

仅用来个人学习和分享,如若侵权,留言立删。

尊重他人知识产权,不做拿来主义者!

喜欢的可以关注我哦QAQ,

你的关注就是我write博文的动力。

机器学习: 如何防止过拟合相关推荐

  1. 「机器学习速成」过拟合的风险和泛化

    https://www.toutiao.com/a6702764208561340942/ 大家好,今天我们学习[机器学习速成]之过拟合的风险和泛化. 泛化是指模型很好地拟合以前未见过的新数据的能力. ...

  2. 使用tensorflow实现机器学习中的线性拟合

    使用tensorflow实现机器学习中的线性拟合 这个例子是模拟的单变量线性回归,通过提高单变量的阶数来增加特征数量,例如:4阶相当于分解为四个特征 这种思想同样适用于多变量线性回归 import t ...

  3. 机器学习基础概念——过拟合和欠拟合

    欢迎关注,敬请点赞! 机器学习基础概念--过拟合和欠拟合 1. 基本概念 1.1 偏差和方差 2. 欠拟合和过拟合 2.1 学习曲线 2.2 复杂程度曲线 2.3 支持向量机的过拟合和欠拟合 2.4 ...

  4. 一文解决机器学习中的过拟合与欠拟合问题(正则化,数据增强,Dropout)

    一文解决机器学习中的过拟合与欠拟合问题(正则化,数据增强,Dropout,提前终止) 生活中的过拟合与欠拟合现象 过拟合与欠拟合的概念 解决过拟合与欠拟合问题的四大金刚 正则化 数据增强 Dropou ...

  5. 机器学习模型评价指标及拟合概念

    机器学习模型评价指标及拟合概念 一.机器学习模型评价指标 回归问题等连续值的差值的判断 1) MAE平均绝对误差: 2)MSE均方误差: 3)RMSE均方根误差: 4)R平方: 分类问题 1)混淆矩阵 ...

  6. 机器学习防止模型过拟合的讲解

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Poll,编辑:深度学习这件小事 来源 | http://www. ...

  7. 收藏 | 机器学习防止模型过拟合

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达    目录 LP范数 L1范数 L2范数 L1范数和L2范数的区别 ...

  8. 机器学习中防止过拟合的处理方法

    原文地址:一只鸟的天空,http://blog.csdn.net/heyongluoyao8/article/details/49429629 防止过拟合的处理方法 过拟合   我们都知道,在进行数据 ...

  9. 机器学习笔记:过拟合和欠拟合

    1 过拟合介绍 如果模型设计的太复杂,可能会过拟合 下图的1~5分别代表最高项为1~5次幂的线性回归问题: 当模型太复杂的时候,虽然训练集上我们得到较小的误差,但是在测试集上,误差就奇大无比 复杂模型 ...

  10. 干货︱机器学习中防止过拟合的处理方法

    我们都知道,在进行数据挖掘或者机器学习模型建立的时候,因为在统计学习中,假设数据满足独立同分布(i.i.d,independently and identically distributed),即当前 ...

最新文章

  1. 刘启成_编写并使用shell脚本
  2. 数据库安全性之使用命令来实现用户管理以及角色.十五
  3. 手工测试对比自动化测试
  4. 「工具」IndexDB 版备忘录
  5. 男孩子一定要注意保护自己!
  6. JAVA高性能I/O设计模式
  7. 如何使用3DMax球形化命令
  8. 学习Java过程中创建动态数组的两种方法比较
  9. 如何开始使用 Java 机器学习
  10. “卫士通”杯首届四川省高校网络攻防大赛文档及题目
  11. 微信语音java_java微信企业号开发之发送消息(文本、图片、语音)
  12. 经济类图书推荐--转自水木
  13. 从《国产凌凌漆》看到《头号玩家》,你就能全面了解5G
  14. 获取tinyMCE编辑器中的内容
  15. 云栖大会人脸识别闸机【技术亮点篇4】--户外闸机高20%的抗撞击能力
  16. 三角形公式 [重心, 内心, 外心, 垂心]
  17. Java入门第116课——向List中插入和删除元素
  18. html5 application cache 空间限制,HTML5离线存储之Application Cache
  19. 算法工程师的工程修养:Linux 服务器性能故障分析
  20. 用两步排除法快速解答浮点数表示范围选择题

热门文章

  1. Excel如何提取括号前内容
  2. 提取B站字幕方法(亲测有效)
  3. 基础篇 | 03 | 如何提升用户体验
  4. 测试用例--------水杯
  5. pytorch时空数据处理2——图像转文本/字幕Image-Captionning(一)
  6. java合成海报的工具类
  7. 有哪些常用的短信群发平台呢?
  8. Dirty cow提权(脏牛)CVE-2016-5195 演示
  9. c语言题目 生日 星座 出生石,输入月份打出星座问题,大神帮忙看看,为什么后面输入前面行而后面不行了?...
  10. Linux网络命令与脚本使用