本文首发于 AI柠檬博客,原文链接:机器学习:过拟合与欠拟合问题 | AI柠檬

过拟合(overfitting)与欠拟合(underfitting)是统计学中的一组现象。过拟合是在统计模型中,由于使用的参数过多而导致模型对观测数据(训练数据)过度拟合,以至于用该模型来预测其他测试样本输出的时候与实际输出或者期望值相差很大的现象,。欠拟合则刚好相反,是由于统计模型使用的参数过少,以至于得到的模型难以拟合观测数据(训练数据)的现象。

我们总是希望在机器学习训练时,机器学习模型能在新样本上很好的表现。过拟合时,通常是因为模型过于复杂,学习器把训练样本学得“太好了”,很可能把一些训练样本自身的特性当成了所有潜在样本的共性了,这样一来模型的泛化性能就下降了。欠拟合时,模型又过于简单,学习器没有很好地学到训练样本的一般性质,所以不论在训练数据还是测试数据中表现都很差。我们形象的打个比方吧,你考试复习,复习题都搞懂了,但是一到考试就不会了,那是过拟合;如果你连复习题都还没搞懂,更不用说考试了,那就是欠拟合。所以,在机器学习中,这两种现象都是需要极力避免的。

举一个简单的例子吧,我们来看一下下面这一张图。我们有一些数据样本,大致呈二次函数形式,可以看出,用二次函数来做回归拟合是最合适的。如果我们不呢?比如,我们用最高次为6次的函数来拟合,我们可能会得到如图左边那样的曲线,显然,这并不是我们想要的模型,它把个别数据的偶然偏差也当成了共性而完美拟合了进去;或者我们用线性的函数来拟合它,我们可以得到大概如右图的函数直线,这显然没有很好的拟合训练样本数据,更不用说测试数据了。

(过拟合与欠拟合示意图)

相对来说,欠拟合比较容易解决。如果是统计回归模型,我们只需要增加模型的参数就可以了,原来是线性模型,那么现在改为二次模型就行,原来是线性回归,现在改为二次回归即可。如果是神经网络模型,我们可以通过增加网络的层数和每一层的神经元数目即可,尤其是增加网络层数的效果更好。如果你现在不知道神经网络是什么东东也不要紧,只要你能理解统计回归就行。但是过拟合就不是那么简单的了。

关于在神经网络方面的欠拟合问题的解决方法请查看:
深度学习:欠拟合问题的几种解决方案

发生过拟合说到底还是训练数据与训练参数的比例太小而导致的,所以,我们可以通过增加数据量或者适当减小参数数量来解决。增加训练数据量是根据大数定理,当数据量足够大时,训练模型会无限逼近实际,而减小参数数量则是人工根据模型的需要,剔除那些跟得到模型不太相关的参数来实现。但是如果我们无法增加数据量或者这些参数都是有用的不能去除怎么办?

还有办法,那就是正则化(Regularization),这也是常用的一种方法。通常,为了防止过拟合,我们都会在目标方程中添加一个正则项(regularization term),且通过正则因子(或“正则化参数”,英文:Regularization Coefficient或Regularization Parameter)λ来平衡目标方程与正则项。比如,在对数几率回归(Logistic Regression)中,我们可以对其代价函数(Cost Function)和其梯度函数进行正则化,如下图:

正则化后的代价函数:

正则化后的梯度函数:

在相应的MATLAB代码文件CostFunction.m中,我们将其中的内容改写为如下代码:

function [J, grad] = CostFunction(theta, X, y)
m = length(y); % 训练样本数
J = 0;
grad = zeros(size(theta));theta_1=[0;theta(2:end)];    % 先把theta(1)拿掉,不参与正则化
lambda = 1;    % 正则因子
J = sum(-y .* log(sigmoid(X * theta)) - (1 - y) .* log(1 - sigmoid(X * theta)) )/m  + lambda/(2*m) * theta_1' * theta_1;
grad = (X' * (sigmoid(X * theta) - y))/m + lambda/m * theta_1;end

加入了正则项之后,我们明显可以发现训练之后的代价值(cost)明显增加,这说明之前的模型一定程度上出现了过拟合现象。比如,我们上次的那个对数几率回归2里面的模型,同样还是使用梯度下降,经过训练后代价值变为0.3492,θ参数变成[-1.5586; 1.4058; 1.2670]。

你一定很好奇,为什么正则化可以防止过拟合呢?很多讲者并没有过多提及,而很多人的文章上也表示其原理不容易明白。简单地理解就是,通过加入一个正则项,在最小化新的代价函数的时候,正则项使得预测值与真实值之间的误差并不会达到最小,也就是说它是不会去完美拟合的,这样也就防止了过拟合,提高了机器学习模型的泛化能力。

一种最常用的正则化技术是权重衰减,通过加入的正则项对参数数值进行衰减,得到更小的权值。对于一些本身权重就很小的参数来说,其本身对结果的影响微乎其微,尤其是λ较大的时候,正则项的加入使得其几乎衰减到零,相当于去掉了这一项特征,类似于减少特征维度。当然了,式子中一项减少,正则化使得其他项的权值可能还会有所增加。而当 λ 较小时,我们会得到相对来说更小一些的代价函数值,而此时拟合的会更精细一些。

更确切的来说,根据吴恩达教授在斯坦福大学机器学习公开课中的讲解,我们来用多项式拟合来说,如果我们只需要到二次项就可以了,如果还有更高次项的话,加入正则项,相当于减小参数的大小,因为是更高次的项的出现导致了过拟合,那么我们就减小它们使其趋近于0就好了。所以,我们修改代价函数,对3次项4次项乃至更高次的项加入正则项,给予机器学习模型一些惩罚。不论是线性回归还是对数几率回归,我们可以对每一项都加入正则项来惩罚,不过根据惯例,我们不对θ0进行惩罚。

如果我们令λ的值很大的话,为了使 Cost Function 尽可能的小,所有的 θ 的值(不包括 θ0)都会在一定程度上减小。不过我们要选一个合适的正则化参数λ,太大的话,使得参数都接近于零,只剩下θ0,又会出现欠拟合。至于具体选择什么值,我们可以通过多尝试几次来确定,如果你有更好的想法,欢迎在下面评论中跟我讨论。

过拟合问题与欠拟合问题是一组很重要的机器学习问题,这是你在今后的机器学习实验中会经常遇到的。正则化是解决过拟合问题的法宝,掌握正则化这一方法是非常重要的。当你学会线性回归、对数几率回归、使用梯度下降法和正则化方法之后,你就已经掌握了丰富的机器学习知识,可以用这些知识来做一些机器学习产品。

本文首发于 AI柠檬博客,原文链接:机器学习:过拟合与欠拟合问题 | AI柠檬

如果你想学习更多机器学习的内容,欢迎访问AI柠檬博客~

机器学习:过拟合与欠拟合问题相关推荐

  1. 机器学习中过拟合、欠拟合与方差、偏差的关系是什么?

    机器学习中过拟合.欠拟合与方差.偏差的关系是什么? 过拟合(overfitting)与欠拟合(underfitting)是统计学中的一组现象.过拟合是在统计模型中,由于使用的参数过多而导致模型对观测数 ...

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

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

  3. 机器学习算法中的过拟合与欠拟合(转载)

    在机器学习表现不佳的原因要么是过度拟合或欠拟合数据. 1.机器学习中的逼近目标函数过程 监督式机器学习通常理解为逼近一个目标函数(f)(f),此函数映射输入变量(X)到输出变量(Y). Y=f(X)Y ...

  4. 机器学习笔记(通俗易懂)---监督学习介绍:分类与回归,泛化~过拟合与欠拟合(2)

    机器学习笔记-监督学习介绍:分类与回归,泛化~过拟合与欠拟合(2) 明天开始就打数模美赛了,今天简单地介绍一下监督学习 以下都是本人在学习机器学习过程中的一些心得和笔记,仅供参考 文章目录 机器学习笔 ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 机器学习基础专题:线性判别器
  2. P1417 烹调方案 (0/1背包+贪心)
  3. 3D数学基础:图形与游戏开发---随笔二
  4. python paramiko sftp_python paramiko (ssh,sftp)
  5. eclipse配置代码提示
  6. mybatis解决 1 字节的 UTF-8 序列的字节 1 无效
  7. iis设置导致python调用urllib.request.urlopen出错问题
  8. ENVI5.3安装教程|带资源
  9. Bootstrap3 模态对话框的调用方式
  10. 死磕java_死磕 java同步系列之AQS终篇(面试)
  11. caffe 源码阅读与运行流程
  12. 第十章 嵌入式linux的调试技术
  13. 自回归模型(Autoregressive model)(auto)
  14. Axure原型图(以微信作为参考)
  15. 基于Labview开发TestStand用户界面时ConnectCommand List
  16. 远程工具TeamViewer
  17. 数据中心服务器机柜电气参数,数据中心服务器机柜选择指南
  18. 过去式加ed的发音_关于动词过去式+ED的发音 动词过去式发音规则
  19. oracle将汉字转为全拼或返回拼音首字母sql
  20. oracle数据库报12514,Oracle数据库ORA-12514错误的解决办法

热门文章

  1. Oracle协议适配器错误解决办法
  2. Python之reverse函数
  3. 万普广告遭金山毒霸封杀,祸及APP开发者,2家的恶斗成为“金山恶霸门”的一个重要起因
  4. 特征选择, 经典三刀
  5. python os.walk遍历目录_python中os.walk()遍历目录中所有文件
  6. 当下常见的企业文件管理工具都有哪些?
  7. buuojCTF [WUSTCTF2020]level11
  8. 江阴学院计算机网络,【计算机维护论文】谈计算机网络技术课程思政实践(共4150字)...
  9. 容易被人忽略的创业赚钱点子和赚钱的坑
  10. sql注册服务器视频教程,服务器sql server安装教程视频