过度拟合-机器学习(machine learning)笔记(Andrew Ng)

过度拟合-机器学习(machine learning)笔记(Andrew Ng)过度拟合 overfitting 什么是过度拟合如何解决过拟合问题正则化正则化线性回归正则化逻辑回归过度拟合 overfitting 什么是过度拟合欠拟合 如果一个算法没有很好的拟合数据 比如一个本应该用二次多项式拟合的

大家好,欢迎来到IT知识分享网。

过度拟合(overfitting)

什么是过度拟合

欠拟合:如果一个算法没有很好的拟合数据,比如一个本应该用二次多项式拟合的数据用了线性去拟合,导致最后拟合数据的效果很差。我们称之为欠拟合(underfitting)或者高偏差(high bias)。
过拟合:如果一个应该用二次多项式去拟合的数据用了四次多项式甚至更高次,在拟合这些数据的时候可能表现的很好,使得代价函数很低。但其实并不是一个好的模型,只要加入新的数据就有极大的可能性不匹配需要重新拟合。这种情况叫做过拟合(overfitting)或者高方差(high variance)。(个人想法:数据中存在着一些噪声,高阶多项式去拟合数据的时候将这些噪声也考虑进去,即尽可能的去拟合这些噪声点,使得代价函数非常的低甚至接近于0,最后拟合出来的模型“歪歪扭扭”,对应高阶多项式的图像,但是非常“脆弱不堪”,一旦有在边界上的数据出现,就会表现的很差)。
什么时候出现过拟合:特征太多而训练数据太少的时候

如何解决过拟合问题

  • 减少特征的数量
    • 手工去选取特征,留下重要的特征
    • model selection algorithm


这种方法的缺点是会丢弃一些有用的信息

  • 正则化(regularization)
    • 保持所有的特征,但是减少 θj 的数量


当我们有很多特征,并且每个特征对结果 y 都有或多或少的一点影响的时候,正则化这种方法表现的很好。

正则化

原理
如果在线性回归中,此时已经过拟合了,且我们提出的多项式如下:




θ0+θ1x+θ2x2+θ3x3+θ4x4



而实际上我们需要的是:

θ0+θ1x+θ2x2


那么我们可以令代价函数如下:

J(θ)=12m[i=1m(hθ(x(i))y(i))2+1000θ23+1000θ24]


“1000”只是代指一个非常大的数。那么如果要使代价函数最小, θ30,θ40 .也就是说, x3,x4 的权重是非常小的,可以忽略不计。所以我们改用二次多项式去拟合。

J(θ)=12m[i=1m(hθ(x(i))y(i))2+λj=1mθ2j]

正则化参数 λ 如果过大,那么为了保证代价函数尽可能小,除了 θ0 以外的所有参数都约等于0,这样会产生欠拟合的情况。
如果过小,效果不佳,仍然过拟合。
为什么所有的 θ 都要乘以 λ ?
因为这样可以是所有 θ 值都非常小,最后产生的曲线不会因为高次多项式而变的“歪歪扭扭”,而是一条近似最佳拟合的曲线,但是由于高次项仍然存在但是权重很小,所以扭曲的程度非常的小。


正则化线性回归

θ 的两种方法:

  • 梯度下降

代价函数 J(θ) 在上面已经给出,那么为了得到 θ 的值,我们定义的更新过程如下:

θ0:=θ0α1mi=1m(hθ(x(i))y(i))x(i)0θj:=θj(1αλm)α1mi=1m(hθ(x(i))y(i))x(i)jj=1,2,3,...,n

  • 标准方程

θ=(XTX+λ00...001...0...........00...1)1XTy

在这里提一下在线性回归中没有提及的 XTX 不可逆的情况:
这里写图片描述
那么正则化,可以在m远远小于n的情况下也可以得到可逆的矩阵( λ0 )。
todo:推导该公式


正则化逻辑回归

  • 梯度下降
J(θ)=[1mi=1my(i)loghtheta(x(i))+(1y(i))log(1hθ(x(i)))]+λ2mj=1nθ2j


更新过程:

θ0:=θ0α1mi=1m(hθ(x(i))y(i))x(i)0θj:=θj(1αλm)α1mi=1m(hθ(x(i))y(i))x(i)jj=1,2,3,...,n


这里的式子看起来和线性回归中的一样,但是 hθ(x) 其实是不一样的。

  • Advanced optimization
function [jVal, gradient] = costFunction(theta) jVal = [code to compute J(\theta)]; gradient(1) = [code to compute $\frac{\partial}{\partial\theta_0}J(\theta)$]; ... gradient(n+1) = [code to compute $\frac{\partial}{\partial\theta_n}J(\theta)$];

将这个函数带入fminunc函数中:

options = optimset('GradObj','on','MaxIter','100'); initialTheta = zeros(2,1); [optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

todo:使用fminunc函数到具体的问题中,来理解该算法的具体应用和优势









免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/126072.html

(0)
上一篇 2025-09-21 19:45
下一篇 2025-09-21 20:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信