无论在机器学习还是深度学习建模中都可能会遇到两种最常见问题,一种叫过拟合,另外一种叫欠拟合

上图展示了不同线性回归模型对训练集样本的拟合情况,可以发现,第一个模型是一条直线,不能很好的拟合训练集,这就是欠拟合(UnderFitting)或者说模型是高偏差的(HighBias)。第三个模型是一个高阶多项式,虽然对训练集拟合的很好,但它的特征过多,如果没有足够的数据约束,就不会有良好的泛化能力(泛化能力是指一个模型应用到新样本的能力,比如这里的新样本是指没有出现在训练集的样本),也就不能对新样本做出正确的预测,这就是过度拟合(OverFitting)或者说模型是高方差的(HighVarience)。第二个则是一个理想的模型。

在机器学习中,我们用训练数据集去训练一个模型,通常的做法是定义一个误差函数,通过将这个误差的最小化过程,来提高模型的性能。然而我们学习一个模型的目的是为了解决训练数据集这个领域中的一般化问题,单纯地将训练数据集的损失最小化,并不能保证在解决更一般的问题时模型仍然是最优,甚至不能保证模型是可用的。这个训练数据集的损失与一般化的数据集的损失之间的差异就叫做泛化误差(Generalization Error)。

而泛化误差可以分解为偏差(Biase)方差(Variance)噪声(Noise),他们之间的关系如下图所示:

假设红色的靶心区域是学习算法完美的正确预测值,蓝色点为训练数据集所训练出的模型对样本的预测值,当我们从靶心逐渐往外移动时,预测效果逐渐变差。从上面的图片中很容易可以看到,左边一列的蓝色点比较集中,右边一列的蓝色点比较分散,它们描述的是方差的两种情况。比较集中的属于方差比较小,比较分散的属于方差比较大的情况。我们再从蓝色点与红色靶心区域的位置关系来看,靠近红色靶心的属于偏差较小的情况,远离靶心的属于偏差较大的情况。

假设我们正在做一个分类器,分别在训练集和验证集上测试,以下为四种可能的情况:

可见①、④两种情况的训练集误差都很小,接近optimal error,这种就称为low bias。说明训练的很到位了。
相反②、③两者的训练集误差很大,这就称为high bias。因此我们知道,bias就是衡量训练集和我们的最小误差的差距。

再来看看variance是怎么判断。①情况下,验证集相比训练集误差上升了很多,这就是high variance。而②呢,虽然它的验证集误差更大,但是相比它的训练集误差,基本没太大变化,因此它不能叫low variance。所以,说白了,variance是指你的验证集和你训练集的效果的差别,而不是某个绝对的值。

过拟合的根本原因:特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。 过度的拟合了训练数据,而没有考虑到泛化能力。因此需要减少特征维度,或者正则化降低参数值。

欠拟合的根本原因:特征维度过少,模型过于简单,导致拟合的函数无法满足训练集,误差较大; 因此需要增加特征维度,增加训练数据。

避免过拟合的方法:

  1. 交叉验证:即重复使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集训练模型,用测试集来评估模型预测的好坏。由于在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。当数据量不是很充足的时候,会使用交叉验证。

    在训练过程中,我们通经常使用它来确定一些超參数(比方,依据validation data上的accuracy来确定early stopping的epoch大小、依据validation data确定learning rate等等。

  2. 正则化:(L1和L2)通过改动代价函数实现。

  3. 数据增强:增加训练数据样本。

  4. Dropout:通过改动神经网络本身来实现。例如,训练前,随机删除一部分隐层单元,保持输入输出层不变,依照BP算法更新上图神经网络中的权值。

  5. early stopping:即提前终止。Early stopping是一种以迭代次数截断的方法来防止过拟合。

  6. Bagging用不同的模型拟合不同部分的训练集;Boosting只使用简单的神经网络;

  7. 数据清洗:将错误的label纠正或者删除错误的数据。

欠拟合的解决方法:

  1. 添加其他特征项:添加特征的重要手段是“组合”,“泛化”,“相关性”;另外,特征添加的首选项是“上下文特征”,“平台特征”。

  2. 添加多项式特征:比较常用,例如,在线性模型中通过添加二次项或者三次项使模型的泛化能力更强。

  3. 减少正则化参数:特征化的目的是用来防止过拟合的。

目录

正则化法

1. L1/L2正则化

2. Dropout

3. EarlyStopping


正则化法

过拟合产生的本质原因通常是因为参数比较大导致的,因为过拟合,就是拟合函数需要顾忌每一个点,当存在噪声的时候,原本平滑的拟合曲线会变得波动很大。在某些很小的区间里,函数值的变化很剧烈,这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。通过添加正则项,假设某个参数比较大,目标函数加上正则项后,也就会变大,因此该参数就不是最优解了。

我们使用正则化,为了防止过拟合, 进而增强泛化能力,正则化可按策略分为三类:

经验正则化:通过工程上的技巧来实现更低的泛化误差方法,比如:提前终止法、模型集成、Dropout等;

参数正则化:直接提供正则化约束,比如:L1/L2正则化法等;

隐式正则化:不直接提供约束,比如:数据有关的操作,包括归一化、数据增强、扰乱标签等;

1. L1/L2正则化

首先介绍一下范数的定义,机器学习、深度学习等计算机领域内用的比较多的就是迭代过程中收敛性质的判断,一般迭代前后步骤的差值称为范数,用范数表示其大小。在数学上,范数包括向量范数和矩阵范数,向量范数表征向量空间中向量的大小,矩阵范数表征矩阵引起变化的大小。一种非严密的解释就是,对应向量范数,向量空间中的向量都是有大小的,这个大小如何度量,就是用范数来度量的,不同的范数都可以来度量这个大小。

L-P范数,与闵可夫斯基距离的定义一样,L-P范数不是一个范数,而是一组范数,其定义如下:

其中 “ || ” 这个符号叫做范数,它事实上是由线性赋范空间到非负实数的映射,在线性赋范空间中,它可以表示空间中的点与原点间的距离,两点间的距离也是用两点之差的范数来表示的,范数所满足的条件有 ||x||>=0,且 ||x||=0当且仅当 x=0。

根据 P 的变化,范数也有着不同的变化,一个经典的有关P范数的变化图如下:

上图表示了p从无穷到0变化时,三维空间中到原点的距离(范数)为1的点构成的图形的变化情况,以常见的L-2范数(p=2)为例,此时的范数也即欧氏距离,空间中到原点的欧氏距离为1的点构成了一个球面。

L-0范数,当P=0时,也就是L0范数,由上面可知,L0范数并不是一个真正的范数,它主要被用来度量向量中非零元素的个数。

L-1范数,表示向量中各个元素绝对值之和,L1范数有很多的名字,例如我们熟悉的曼哈顿距离、最小绝对误差,或者称为Lasso回归 :

由于L1范数的天然性质,对L1优化的解是一个稀疏解,因此L1范数也被叫做稀疏规则算子。通过L1可以实现特征的稀疏,去掉一些没有信息的特征,例如在对用户的电影爱好做分类的时候,用户有100个特征,可能只有十几个特征是对分类有用的,大部分特征如身高体重等可能都是无用的,利用L1范数就可以过滤掉。

稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵,即得到的线性回归模型的大部分系数都是0. 通常机器学习中特征数量很多,例如文本处理时,如果将一个词组(term)作为一个特征,那么特征数量会达到上万个(bigram)。在预测或分类时,那么多特征显然难以选择,但是如果代入这些特征得到的模型是一个稀疏模型,表示只有少数特征对这个模型有贡献,绝大部分特征是没有贡献的,或者贡献微小(因为它们前面的系数是0或者是很小的值,即使去掉对模型也没有什么影响),此时我们就可以只关注系数是非零值的特征。这就是稀疏模型与特征选择的关系。

L-2范数,即向量元素绝对值的平方和再开方,我们用的最多的度量距离欧氏距离就是一种L2范数,或者称为岭回归:

假设我们需要优化的目标函数为 J(w,b) 函数,在目标函数后面添加一个系数的“惩罚项”是正则化的常用方式,为了防止系数过大从而让模型变得复杂。在加了正则化项之后的目标函数为:


上面公式中,λ/2m是一个常数,m为样本个数,λ是一个超参数,用于控制正则化程度,L1正则化通过让原目标函数加上了所有特征系数绝对值的和来实现正则化,即在最后加上L1范数;而L2正则化通过让原目标函数加上了所有特征系数的平方和来实现正则化,即在最后加上L2范数。两者都是通过加上一个和项来限制参数大小,却有不同的效果:L1正则化更适用于特征选择,而L2正则化更适用于防止模型过拟合

那为什么增加的一项,可以使θ的值减小呢?因为如果我们令  

机器学习-过拟合和欠拟合以及正则化处理相关推荐

  1. 机器学习/算法面试笔记1——损失函数、梯度下降、优化算法、过拟合和欠拟合、正则化与稀疏性、归一化、激活函数

    正值秋招,参考网络资源整理了一些面试笔记,第一篇包括以下7部分. 1.损失函数 2.梯度下降 3.优化算法 4.过拟合和欠拟合 5.正则化与稀疏性 6.归一化 7.激活函数 损失函数 损失函数分为经验 ...

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

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

  3. python 线性回归与逻辑回归区别(有监督学习【分类、回归】、无监督学习【聚类、强化学习】、损失函数、梯度下降、学习率、过拟合、欠拟合、正则化)

    引用文章1 https://blog.csdn.net/viewcode/article/details/8794401 引用文章2:一.线性回归和逻辑回归 一.什么是机器学习 利用大量的数据样本,使 ...

  4. 31,32,33_过拟合、欠拟合的概念、L2正则化,Pytorch过拟合欠拟合,交叉验证-Train-Val-Test划分,划分训练集和测试集,K-fold,Regularization

    1.26.过拟合.欠拟合及其解决方案 1.26.1.过拟合.欠拟合的概念 1.26.1.1.训练误差和泛化误差 1.26.1.2.验证数据集与K-fold验证 1.26.1.3.过拟合和欠拟合 1.2 ...

  5. 百面机器学习 #2 模型评估:07 过拟合和欠拟合及其常用解决方法

    如何有效地识别"过拟合"和"欠拟合"现象,并有针对性地进行模型调整,是不断改进机器学习模型的关键. 过拟合 模型对于训练数据拟合呈过当的情况 反映到评估指标上, ...

  6. 机器学习中的过拟合与欠拟合

    目录 一.什么是过拟合与欠拟合 二.原因及解决方法 三.正则化类别 四.拓展-原理 问题:训练数据训练的很好啊,误差也不大,为什么在测试集上面有 问题呢? 当算法在某个数据集当中出现这种情况,可能就出 ...

  7. 【机器学习】过拟合与欠拟合

    我们在训练机器学习模型或者深度学习神经网络中经常会遇到过拟合与欠拟合的问题,接下来就对这两个问题进行简单介绍,并举出几种相应的解决办法. 1.过拟合与欠拟合 过拟合是指训练数据上能够获得比其他假设更好 ...

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

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

  9. 机器学习之过拟合和欠拟合

    文章目录 前言 什麽是过拟合和欠拟合? 过拟合和欠拟合产生的原因: 欠拟合(underfitting): 过拟合(overfitting): 解决欠拟合(高偏差)的方法 1.模型复杂化 2.增加更多的 ...

  10. 机器学习考点---过拟合与欠拟合、CNN原理......

    2 . 与数据相关的内容:数据的标注来源.规范化.增广.噪声处理怎么处理?数据有噪声好不好? 测试集.验证集.训练集各自的作用: 训练集:参数调优. 验证集:超参.模型的选择,模型评估,正则化 . 为 ...

最新文章

  1. linux hexo写博客,自己centos7架设hexo网站
  2. 7 centos 源码安装samba_CentOS搭建WonderTrader开发环境及v0.5.4版本发布
  3. 9.19scikit-learn安装方法
  4. 正则表达式中^的用法
  5. kail Linux 安装Parallels Tools
  6. Linux安装Nginx使用负载均衡
  7. 中南月赛 1313: ZZY的宠物
  8. 一行c语言代码,打钩的一行c语言代码解释一下,谢谢,详细解释绝对最佳
  9. WinCE程序的几种开发方法
  10. 美团脱颖而出的经验_2016年脱颖而出的7个很棒的小开源项目
  11. 详解循环神经网络RNN(实践篇)
  12. Long.ValueOf(String) Long.parseLong(String) 区别 看JAVA包装类的封箱与拆箱
  13. java制作数字彩虹雨的代码,canvas+gif.js打造自己的数字雨头像的示例代码
  14. 怎么用虚拟机搭建云服务器,利用虚拟机搭建云服务器
  15. 国标视频云服务平台EasyGBS出现只能通过录像机观看的情况该如何解决?
  16. 简述观察法的优缺点_各种观察法的优缺点
  17. 折腾修改SQLCipher静态库的符号表
  18. teamviewer远程黑屏问题
  19. 调频 调幅 与 通信
  20. Linux 图片批量压缩工具 ImageMagick

热门文章

  1. 阿里研发支出连续三年登顶; 《MIT科技评论》为阿里AI语音技术点赞;达摩院引入以色列著名计算机视觉科学家 | 周博通...
  2. 10月29日云栖精选夜读 | 十条精进原则,给迷茫于劳而无功的技术人
  3. 听说你的项目中仅这些资源就卡成了翔?看看他们怎么做!
  4. [Leetcode] 445. Add Two Numbers II
  5. redis-redisTemplate模糊匹配删除
  6. mysql查询字符串出现次数
  7. java处理excel(java使用Apache POI处理Excel)
  8. Caused by: java.lang.ClassNotFoundException: Didn't find class android.support.v4.view.ViewPager
  9. 参数验证 @Validated 和 @Valid 的区别,Java Web 开发必备。
  10. 通俗易懂,带你了解Kafka