Ng第七课:正则化与过拟合问题 Regularization/The Problem of Overfitting

7.1  过拟合的问题

7.2  代价函数

7.3  正则化线性回归

7.4  正则化的逻辑回归模型



7.1  过拟合的问题

如果我们有非常多的特征,我们通过学习得到的假设预测可能能够非常好地适应训练集(代价函数可能几乎为 0),但是可能会不能推广到新的数据。

下图是一个回归问题的例子:

第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一 个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适。

分类问题中也存在这样的问题:

就以多项式理解,x 的次数越高,拟合的越好,但相应的预测的能力就可能变差。 问题是,如果发现了过拟合问题,应该如何处理?

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

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


7.2  代价函数

上面的回归问题中如果我们的模型是:

可以从之前的事例中看出,正是那些高次项导致了过拟合的产生,所以如果能 让这些高次项的系数接近于 0 的话,我们就能很好的拟合了。

所以我们要做的就是在一定程度上减小这些参数θ的值,这就是正则化的基本方法。我们决定要减少 θ3 和 θ4 的大小,要做的便是修改代价函数,在其中 θ3 和 θ4 设置一点惩罚。这样做的话,在尝试最小化代价时也需要将这个惩罚纳入考虑中,并最终导致选择较小一些的 θ3和θ4。修改后的代价函数如下:

通过这样的代价函数选择出的 θ3 和 θ4 对预测结果的影响就比之前要小许多。

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

其中 λ 又称为正则化参数(Regularization Parameter)。

注:

  1. 根据惯例,不对 θ0 进行惩罚。经过正则化处理的模型与原模型的可能对比如下图所示:
  2. 如果选择的正则化参数 λ 过大,则会把所有的参数都最小化了,导致模型变成 ,也就是上图中红色直线所示的情况,造成欠拟合。        
  3. 为什么增加的一项 可以使θ的值减小呢? 因为如果令λ的值很大的话,为了使 Cost Function 尽可能的小,所有的θ的值(不包括θ0)都会在一定程度上减小。但若λ的值太大了,那么θ(不包括θ0)都会趋近于 0,这样我们所得到的只能是一条 平行于 x 轴的直线。 所以对于正则化,我们要取一个合理的λ的值,这样才能更好的应用正则化。


7.3  正则化线性回归

正则化线性回归的代价函数为:

如果要使用梯度下降法令这个代价函数最小化,因为我们未对 θ0 进行正则化,所以梯度下降算法将分两种情形:

对上面的算法中 j=1,2,...,n 时的更新式子进行调整可得:

可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令 θ 值减少了一个额外的值。

同样也可以利用正规方程来求解正则化线性回归模型,方法如下所示:

图中的矩阵尺寸为 (n+1)*(n+1)。


7.4  正则化的逻辑回归模型

对于逻辑回归,也给代价函数增加一个正则化的表达式,得到:

要最小化该代价函数,通过求导,得出梯度下降算法为:

注:看上去同线性回归一样,但是知道,所以与线性回归不同。

Octave 中,依旧可以用 fminuc 函数来求解代价函数最小化的参数,值得注意的是参数 的更新规则与其他情况不同,不参与其中的任何一个正则化。



Ng第七课:正则化与过拟合问题 Regularization/The Problem of Overfitting

时间: 2024-10-10 23:23:28

Ng第七课:正则化与过拟合问题 Regularization/The Problem of Overfitting的相关文章

Coursera公开课笔记: 斯坦福大学机器学习第七课“正则化”

Coursera公开课笔记: 斯坦福大学机器学习第七课"正则化" NLPJob 斯坦福大学机器学习第七课"正则化"学习笔记,本次课程主要包括4部分: 1) The Problem of Overfitting(过拟合问题) 2) Cost Function(成本函数) 3) Regularized Linear Regression(线性回归的正则化) 4) Regularized Logistic Regression(逻辑回归的正则化) 以下是每一部分的详细解读

第七课 进程通信

unix_c_07.txt================第七课 进程通信================一.基本概念------------1. 何为进程间通信~~~~~~~~~~~~~~~~~进程间通信(Interprocess Communication, IPC)是指两个,或多个进程之间进行数据交换的过程.2. 进程间通信分类~~~~~~~~~~~~~~~~~1) 简单进程间通信:命令行参数.环境变量.信号.文件.2) 传统进程间通信:管道(fifo/pipe).3) XSI进程间通信:

BeagleBone Black板第七课:GPIO编程控制

BBB板第七课:GPIO编程控制 在一上课我们通过IO函数做了简单的GPIO端口输出高低电平输出,实现对一个LED指示灯的点亮和关闭控制,本节将通过完整的C++程序,实现第四课Shell脚本的全部功能,实现两个LED指示灯的交替闪亮. 直接通过进入功能程序 1.实现echo 44 > export 打开端口功能 上一课简单测试中,通过手工在BBB板终端模式下打开gpio44端口可通过以下程序实现: #include <stdio.h> #define GPIO_DIR "/sy

第七课 对前面内容的总结

最近忙些,现在抽出个时间总结一下前面所讲的内容. 对于struts1框架的使用,个人认为不仅仅从细节方面去掌握,需要从整体把握,理解这个框架的意思,细节的东西查查资料一般都能解决,所以真个框架的理解很重要.这个同样适用于其他技术的学习,即整体把握再到细节实现,语言Java,php或是其他的,技术原理,框架上都差不多,主要的区别在于语法使用上,所以精通一门语言是十分必要的,这对于以后的工作或是学习都是非常有帮助的.一些大神经常说的话,理解和掌握思想就行,不必拘泥于细节的东西.当然啦,如果你是一个死

Spark3000门徒第七课Spark运行原理及RDD解密总结

今晚听了王家林老师的第七课Spark运行原理及RDD解密,课后作业是:spark基本原理,我的总结如下: 1 spark是分布式 基于内存 特别适合于迭代计算的计算框架 2 mapReduce就两个阶段map和reduce,而spark是不断地迭代计算,更加灵活更加强大,容易构造复杂算法. 3 spark不能取代hive,hive做数据仓库存储,spark sql只是取代hive的计算引擎 4 spark中间数据可以在内存也可以在磁盘 5 partition是一个数据集合 6 注意:初学者执行多

【C++探索之旅】第一部分第七课:函数效应,分而治之

内容简介 1.第一部分第七课:函数效应,分而治之 2.第一部分第八课预告:传值引用,文件源头 函数效应,分而治之 上一课<[C++探索之旅]第一部分第六课:控制流程,随心所至>中,我们学习了条件语句和循环语句. 这两种语句也算是算法的核心了.在更早的课程中,我们学习了变量.这些都是所有编程语言的必备元素. 这一课我们又要学习一个几乎所有编程语言都有的极重要元素: 函数. C++的所有程序都或多或少用到函数,到目前为止,你其实也已经用了好多次了,不过你可能只缘身在此山中,还云深不知处. 函数的功

第七课 GDB调试 (下)

1序言: 通过前面一节第六课 GDB调试 (下)文章,可以掌握理解了gdb调试:怎么启动.运行,打断点.查看变量.甚至改变变量等的知识,今天来大概讲解下调试bug的类型. 2知识点: 2.1 就像之前所说的没有任何一个程序员敢打包票自己写的代码是没任何bug,bug总会有意无意的出现在我们眼前,当程序运行结果于我们预期结果不一样的时候这时候我们就应该调试,总的来说bug分为:语法错误.逻辑错误.硬件异常: 3原理: 3.1 语法错误:一般情况下出现在编译的时候会有提示编译错误这时候我们就可以马上

NeHe OpenGL教程 第七课:光照和键盘

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第七课:光照和键盘 光照和键盘控制: 在这一课里,我们将添加光照和键盘控制,它让程序看起来更美观. 这一课我会教您如何使用三种不同的纹理滤波方式.教您如何使用键盘来移动场景中的对象,还会教您在OpenGL场景中应用简单的光照.这一课

【Linux探索之旅】第二部分第七课:软件安装,如虎添翼

内容简介 1.第二部分第七课:软件安装,如虎添翼 2.第二部分第八课预告:RTFM 阅读那该死的手册 软件安装,如虎添翼 这一课也会相对比较轻松,所以好好享受吧. 我们来谈谈Linux下软件的安装,会在我们的Ubuntu这个Linux发行版中演示. 一般提到软件安装,有过Windows系统使用经验的朋友肯定会深有体会,那个麻烦啊,大致流程是这样的: 在搜索引擎(比如百度或google)中搜索我们的软件名称. 看到一个不错的结果,点击进入.如果是官网一般会进入官网. 下载此软件的安装程序. 双击下