欠拟合(Underfitting)与过拟合(Overfitting)





上面两张图分别是回归问题和分类问题的欠拟合和过度拟合的例子。可以看到,如果使用直线(两组图的第一张)来拟合训,并不能很好地适应我们的训练集,这就叫欠拟合(Underfitting),但是如果x的次数太高(两组图的第三张),拟合虽然很好,但是预测能力反而变差了,这就是过拟合(Overfitting)。

对于欠拟合,我们可以适当增加特征,比如加入x的多次方。通常这很少发生,发生的多的都是过拟合。那么如何处理过度拟合呢?

1. 丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如 PCA)。

2. 正则化。 保留所有的特征,但是减少参数的大小(magnitude)。

加入正则化的代价函数

假设上面的线性回归过拟合例子使用使用的模型是:

我们可以看出这些高次项(3次方、4次方)导致了过拟合,高次项参数大了,从图像来看就是会变得非常曲折,高次项参数小了图像就会较为平整。所以这里我们要做的就是一定程度上减小高次项参数,削弱高次项的影响力。我们的做法是修改代价函数,给theta3、theta4一些惩罚,使得最终选出来的theta3、theta4比较小:

J(theta)=

通过这样的代价函数选择出的theta3 和theta4 对预测结果的影响就比之前要小许多,因为theta3、4一试图变大,代价就会变大很多,那么在使用梯度下降最小化J(theta)时,theta3、4就会变得比较小。

假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。这样的结果是得到了一个较为简单的能防止过拟合问题的假设:

  • 其中 lambda 又称为正则化参数(Regularization Parameter)。
  • 根据惯例,我们不对theta0进

    行惩罚。否则得到的图像比较靠近x轴,那整个模型就偏离数据了。

经过正则化处理的模型与原模型的可能对比如下图所示:

这里的lambda的选择也是较为关键的一点,如上图,theta太小甚至为0,那可能导致过拟合,而lambda太大,图像就会得到一条类似与平行于x轴的直线。

正则化后的线性回归、逻辑回归模型

正则化线性回归

重新将新的代价函数带入梯度下降算法,经过求导、化简后,得到的梯度下降如下:

对于j=1,2,…,n,thetaj的更新式子可以化简为:

可以看到(不看theta0),算法的变化就在于theta每次减少了一个额外的alpha*lambda/m

同样的,可以在正规方程使用正则化:

正则化逻辑回归

同样带入化简,得:

发现得到的式子和线性回归一样,当然,两者的区别之前已经分析过,h(x)不同。

[笔记]机器学习(Machine Learning) - 03.正则化(Regularization)的更多相关文章

  1. [笔记]机器学习(Machine Learning) - 01.线性回归(Linear Regression)

    线性回归属于回归问题.对于回归问题,解决流程为: 给定数据集中每个样本及其正确答案,选择一个模型函数h(hypothesis,假设),并为h找到适应数据的(未必是全局)最优解,即找出最优解下的h的参数 ...

  2. [笔记]机器学习(Machine Learning) - 00.目录/大纲/写在之前

    目录会根据我的学习进度而更新,给自己列一个大纲以系统地看待整个学习过程. 学习资料来源 学习的是Coursera上吴恩达(Andrew Ng)老师的机器学习视频(课程传送门,最近在"最强大脑 ...

  3. [笔记]机器学习(Machine Learning) - 02.逻辑回归(Logistic Regression)

    逻辑回归算法是分类算法,虽然这个算法的名字中出现了"回归",但逻辑回归算法实际上是一种分类算法,我们将它作为分类算法使用.. 分类问题:对于每个样本,判断它属于N个类中的那个类或哪 ...

  4. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...

  5. 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】

    转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...

  6. 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)

    ##机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)---#####注:机器学习资料[篇目一](https://github.co ...

  7. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics)之间有什么关系?

    本来我以为不需要解释这个问题的,到底数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)有什么区别,但是前几天因为有个学弟问我,我想了想发现我竟然也回答 ...

  8. 机器学习(Machine Learning)&amp;深度学习(Deep Learning)资料

    机器学习(Machine Learning)&深度学习(Deep Learning)资料 機器學習.深度學習方面不錯的資料,轉載. 原作:https://github.com/ty4z2008 ...

  9. 【重磅干货整理】机器学习(Machine Learning)与深度学习(Deep Learning)资料汇总

    [重磅干货整理]机器学习(Machine Learning)与深度学习(Deep Learning)资料汇总 .

随机推荐

  1. Unity 3D Framework Designing(5)——ViewModel之间如何共享数据

    对于客户端应用程序而言,单页应用程序(Single Page Application)是最常见的表现形式.有经验的开发人员往往会把一个View分解多个SubView.那么,如何在多个SubView之间 ...

  2. sass或scss入门

    1.sass环境搭载: 安装ruby 安装sass 安装compass 配置webstorm 如果只是使用sass的话,就配置sass命名监听就好了 如图: sass目录如下: 如果配置了compas ...

  3. Unity3D动态读取外部MP3文件给AudioSource

    在PC端VR游戏开发中,需要动态加载本地的MP3文件,但是Unity3D不知道出于什么原因,到5.4.0也不支持MP3文件的外部加载(目前只支持wav和ogg). 因此要想通过www来加载mp3文件就 ...

  4. 《c#入门经典第五版》简介及pdf电子书网盘下载地址(收藏)

    <C#入门经典(第5版)>全面讲解C# 2010和.net架构编程知识,为您编写卓越C# 2010程序奠定坚实基础.C#入门经典系列是屡获殊荣的C#名著和超级畅销书.最新版的<C#入 ...

  5. 《Algorithms Unlocked》读书笔记1——循环和递归

    <Algorithms Unlocked>是 <算法导论>的合著者之一 Thomas H. Cormen 写的一本算法基础. 书中没有涉及编程语言,直接用文字描述算法,我用 J ...

  6. 理解C++中的头文件和源文件的作用【转】

    一.C++编译模式通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C+ ...

  7. angularJS绑定数据中对标签转义的处理

    一.问题 默认情况下,angularJS绑定的数据为字符串文本,不会对其中包含的html标签进行转义生成格式化的文本.在实际工作时碰到接口返回的数据带有html格式时该如何处理. 二.解决办法 1.引 ...

  8. Spring+Redis(keyspace notification)实现定时任务(订单过期自动关闭)

    1.起因 最近公司项目要做订单超期未支付需自动关闭,首先想到的是用spring的定时器(@Schedule),结果领导举各种例子说会影响性能,只能作罢.后来想能不能基于redis实现, 学习(baid ...

  9. 自动生成数学题型二(框架struts2)题型如((a+b)*c=d)

    1. 生成题目 1.1 生成单个题目 public static String[] twoOperatorAndOperator(int num1, int num2) { double first ...

  10. Oracle自动备份.bat 最新更新(支持Win10了)

    20170418更新: 很多年没有用了,最近两天打开来用,发现在Win10下面At命令已经被淘汰不能使用了,还有不少命令工作方式和原来也不一样了 所以就更新了一下下,使用 schtasks 命令代替了 ...