ML(附录3)——过拟合与欠拟合
过拟合与欠拟合
我们希望机器学习得到好的模型,该模型能够从训练样本中找到一个能够适应潜在样本的普遍规律。然而,如果机器学习学的“太好”了,以至把样本的自身特点当作潜在样本的一般特性,这就使得模型的泛化能力(潜在样本的预测能力)下降,从而导致过拟合。反之,欠拟合就是学习的“太差”,连训练样本都没有学好。

欠拟合容易处理,比如在决策树中扩展分支,在神经网络中增加训练轮数,需要重点关注的是麻烦的过拟合。
当训练数据很少时,如果使用了过多的特征,将会导致过拟合:

图三是一个明显的过拟合,它使用了高阶多项式增加一些特新特征,得到的复杂曲线将样本学些的“太好”了,以至失去了泛化性。
正则化
如果发生了过拟合问题,可以通过作图来观察,但是当遇到很多变量时,画图将变得困难,此时我们应该如何处理?
一种常用的办法是减少变量的选取,比如对于房价的预测,影响房价的特征可能有上百个,但其中的某些特征对结果的影响很小,例如邻居的收入,此时就可以去掉这些影响较小的变量。这类做法非常有效,但是其缺点是当你舍弃一部分特征变量时,你也舍弃了问题中的一些信息。也许所有的特征对于预测房价都是有用的,我们实际上并不想舍弃一些特征。
另一种方法就是正则化,特允许我们保留所有的特征变量。
当我们有很多特征变量时,其中每一个变量都能对预测产生一点影响,在下图中,如果用一个二次函数来拟合这些数据,那么它给了我们一个对数据很好的拟合。然而,如果我们用一个更高次的多项式去拟合,最终将得到一个过拟合的复杂曲线。

如果学习策略是平方和损失函数,那么我们的目的就是找到合适的θ使得J(θ)最小化:

应对过拟合的策略就是加上惩罚项,从而使θ3和θ4足够小:

1000 只是随便写的某个较大的数字。现在,因为1000θ32和1000θ42会使J(θ)变得很大,为了最小化J(θ),需要使θ3≈0,θ4≈0,这样将得到一个近似二次函数的新函数,这会是一个更好的模型函数。最终,我们恰当地拟合了数据,所使用的正是二次函数加上一些贡献很小的特征项x3和x4 (它们对应权重接近0)。
上面的方法就是正则化的思路,如果特征值对应一个较小的权重,那么最终将会得到一个简单的假设。
在上面的例子中,由于我们知道x3和x4是重点惩罚对象(对结果影响较小),所以只惩罚它们,但是如果有很多特征,并且我们不知道如何选择关联度更好的参数,如何缩小参数的数目等等,应该如何处理呢?
因为我们并不知道是哪一个或哪几个要去缩小,因此在正则化里,需要减小代价函数中的所有特征值:

上式中n是特征的个数,λ是正则化参数。需要注意的是,惩罚项从θ1开始。按照惯例,我们没有去惩罚 θ0,因此 θ0 的值是大的,但在实践中无论是否包括θ0,差异都不大。
称为正则化项,其目标有两个:希望假设能够很好地适应训练集,想要保持参数值较小。λ的目的就是控制二者之间的平衡,从而保持假设的形式相对简单,以避免过度的拟合。
对J(θ)求偏导:

如果使用梯度下降:

如果λ很小,则丧失了正则化的意义,相当于所有惩罚项都接近于0,这又将导致过拟合;如果λ 很大,将会非常大地惩罚参数θ1 θ2 θ3 θ4 …,最终会使所有这些参数都接近于零,导致欠拟合,如下图所示:

如果我们这么做,相当于去掉了θj≈0对应的特征,只留下了一个简单的假设,这个假设只能表明房屋价格等于 θ0 的值,类似于拟合了一条水平直线,对于数据来说这就是一个欠拟合,它不会去趋向大部分训练样本的任何值。
其它方法
上面的正则化方法实际上被称为L2正则化(L2 regularization),其原型是新损失函数等于原损失函数加上正则化项,其中J0(θ)表示原损失函数:

对θj求导:

此外还有L1正则化(L1 regularization):

L1正则假设特征是拉普拉斯分布,可以保证模型的稀疏性,也就是某些参数等于0;L1正则化导出的稀疏性质已被广泛用于特征选择,可以从可用的特征子集中选择有意义的特征。
L2正则假设特征是高斯分布,通常倾向让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。参数足够小,数据偏移得多一点也不会对结果造成什么影响,可以说“抗扰动能力强”。
此外,还有early stopping、数据集扩增(Data augmentation)、dropout等方法能够降低过拟合。
参考:
Ng视频《Logistic Regression》
周志华《机器学习》
《机器学习导论》
作者:我是8位的
出处:http://www.cnblogs.com/bigmonkey
本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途!
扫描二维码关注公众号“我是8位的”

ML(附录3)——过拟合与欠拟合的更多相关文章
- TensorFlow从1到2(八)过拟合和欠拟合的优化
<从锅炉工到AI专家(6)>一文中,我们把神经网络模型降维,简单的在二维空间中介绍了过拟合和欠拟合的现象和解决方法.但是因为条件所限,在该文中我们只介绍了理论,并没有实际观察现象和应对. ...
- 斯坦福大学公开课机器学习: advice for applying machine learning - evaluatin a phpothesis(怎么评估学习算法得到的假设以及如何防止过拟合或欠拟合)
怎样评价我们的学习算法得到的假设以及如何防止过拟合和欠拟合的问题. 当我们确定学习算法的参数时,我们考虑的是选择参数来使训练误差最小化.有人认为,得到一个很小的训练误差一定是一件好事.但其实,仅仅是因 ...
- 过拟合VS欠拟合、偏差VS方差
1. 过拟合 欠拟合 过拟合:在训练集(training set)上表现好,但是在测试集上效果差,也就是说在已知的数据集合中非常好,但是在添加一些新的数据进来训练效果就会差很多,造成这样的原因是考虑影 ...
- 评价指标的局限性、ROC曲线、余弦距离、A/B测试、模型评估的方法、超参数调优、过拟合与欠拟合
1.评价指标的局限性 问题1 准确性的局限性 准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷.比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率.所以,当 ...
- AI - TensorFlow - 示例04:过拟合与欠拟合
过拟合与欠拟合(Overfitting and underfitting) 官网示例:https://www.tensorflow.org/tutorials/keras/overfit_and_un ...
- [一起面试AI]NO.5过拟合、欠拟合与正则化是什么?
Q1 过拟合与欠拟合的区别是什么,什么是正则化 欠拟合指的是模型不能够再训练集上获得足够低的「训练误差」,往往由于特征维度过少,导致拟合的函数无法满足训练集,导致误差较大. 过拟合指的是模型训练误差与 ...
- 过拟合和欠拟合(Over fitting & Under fitting)
欠拟合(Under Fitting) 欠拟合指的是模型没有很好地学习到训练集上的规律. 欠拟合的表现形式: 当模型处于欠拟合状态时,其在训练集和验证集上的误差都很大: 当模型处于欠拟合状态时,根本的办 ...
- 机器学习(ML)七之模型选择、欠拟合和过拟合
训练误差和泛化误差 需要区分训练误差(training error)和泛化误差(generalization error).前者指模型在训练数据集上表现出的误差,后者指模型在任意一个测试数据样本上表现 ...
- 过拟合/欠拟合&logistic回归等总结(Ng第二课)
昨天学习完了Ng的第二课,总结如下: 过拟合:欠拟合: 参数学习算法:非参数学习算法 局部加权回归 KD tree 最小二乘 中心极限定律 感知器算法 sigmod函数 梯度下降/梯度上升 二元分类 ...
随机推荐
- Android开发 ---从互联网上下载文件,回调函数,图片压缩、倒转
Android开发 ---从互联网上下载文件,回调函数,图片压缩.倒转 效果图: 描述: 当点击“下载网络图像”按钮时,系统会将图二中的照片在互联网上找到,并显示在图像框中 注意:这个例子并没有将图 ...
- 循环神经网络-LSTM
LSTM(Long Short-Term Memory)是长短期记忆网络,是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件. LSTM能够很大程度上缓解长期依赖的问题. ...
- 一个灵活的AssetBundle打包工具
尼尔:机械纪元 上周介绍了Unity项目中的资源配置,今天和大家分享一个AssetBundle打包工具.相信从事Unity开发或多或少都了解过AssetBundle,但简单的接口以及众多的细碎问题 ...
- 8.Python爬虫实战一之爬取糗事百科段子
大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...
- 记一次给nginx的web服务器目录加软链接
先期情况和问题 已安装好nginx服务器和相关配置.nginx的web目录是/usr/share/nginx/html. 现在的问题是希望把web目录换成/root/nginx/html/,但是不更改 ...
- mysql基础查询语法
一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count( ...
- Centos7虚拟机下配置静态IP
以下为Centos7在VMware下配置静态IP地址,配置完后内外网都可以访问,主机与虚拟机之间可以通信. 1.在VMware里,菜单栏点击[编辑]-->[虚拟网络编辑器],如下图.选择的是NA ...
- tomcat多实例的端口设置
需要改4个端口 8080 8009 8005 8443 8080改成8081 8005改成8105 8009改成8109 8443 改成8543
- php腾讯面试题(转)
一.PHP开发部分 1.合并两个数组有几种方式,试比较它们的异同 答:1.array_merge() 2.’+’ 3.array_merge_recursive array_merge 简单的合并数组 ...
- 阿里云ECS服务器购买流程 (自定义配置购买、按月、按量购买)教程
阿里ECS云服务器自定义购买流程 本文提供全图文流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...