机器学习|机器学习(七)过拟合问题与正则化


文章目录

    • Log
  • 一、过拟合问题(overfitting)
    • ①线性回归中的过拟合问题
    • ②逻辑回归中的过拟合问题
    • ③如何解决过拟合问题
  • 二、代价函数(正则化的应用)
    • ①正则化的思想
    • ②正则化的实现
  • 三、线性回归的正则化(Regularized linear regression)
    • 1. 梯度下降
    • 2. 正规方程
  • 四、逻辑回归的正则化(Regularized logistic regression)
    • 1. 梯度下降
    • 2. 高级优化算法中使用正则化
  • 总结

Log 2022.01.14开始本章学习
2022.01.15把剩下的弄完

一、过拟合问题(overfitting) ①线性回归中的过拟合问题
  • 仍然用房价预测的例子来解释什么是过拟合
    机器学习|机器学习(七)过拟合问题与正则化
    文章图片

  • 欠拟合(underfitting): 最开始的线性拟合(上图左),这个算法并没有很好地拟合训练集,即这个算法具有高偏差(high bias)。
  • 刚刚好(just right): 上图中间添加了二次项的式子则能很好地拟合数据。
  • 过拟合(overfitting): 最后一个四阶多项式拟合的算法(上图右)看似可以很好地拟合数据,因为通过了所有的数据点,但是这是一条不断上下波动的曲线,所以并不认为是一个很好的模型,即过拟合,也可以说是具有高方差(high variance)。过拟合问题的表现是假设函数太过庞大,变量太多,没有足够的数据来约束他(给定的数据都被很好地拟合)。
  • 过拟合问题会在变量过多时出现,这时训练出的假设能很好地你和训练集,代价函数可能十分接近 0 ,但是会得到上图右的图像,努力的去迎合给定的数据导致它无法泛化到新的样本中(无法预测新的样本价格),该说法同样可以应用到逻辑回归中。
②逻辑回归中的过拟合问题 机器学习|机器学习(七)过拟合问题与正则化
文章图片

  • 左面的拟合的不够好,即欠拟合;中间的拟合的比较好;右面的则是过拟合,加入了很多高阶项来符合所有预测,导致图像变得扭曲
③如何解决过拟合问题
  • 首先要明确,过拟合问题一般出现在变量(特征)过多,样本数据过少的情况下,所以根据问题产生的这两个原因,就得到了以下对应的解决方法:
    1. 减少选取变量的数量
      ①人工挑选保留那些特征(manually select)
      ②通过模型选择算法(model selection algorithm)来解决(后续会讲到)
      (舍弃特征量的缺点在于,舍弃变量的同时也舍弃了一部分信息,而有时所有信息都是有用的)
    2. 正则化(regularization)
      ①保留所有特征,但是减少量级(magnitude),或是减少参数 θ_j 的大小
      ②当有很多变量时,这种方法非常有效,其中的每一个变量都能对预测的 y 值产生一点影响(或多或少都是有用的)
二、代价函数(正则化的应用) ①正则化的思想 机器学习|机器学习(七)过拟合问题与正则化
文章图片

  • 图左为刚好拟合,图右为过拟合,下面说明如何实现正则化。
  • 根本目的:简化假设函数
  • 直接目标:减少 θ3,θ4 的量级(或大小)
  • 具体实现:通过添加惩罚项(Penalty)
  • 原来的优化目标(要最小化其均方误差代价函数):
    min ? θ 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) 2 {\min\limits_θ}\frac{1}{2m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2 θmin?2m1?i=1∑m?(hθ?(x(i))?y(i))2
  • 对其进行修改:
    min ? θ 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) 2 + 1000 θ 3 2 + 1000 θ 4 2 {\min\limits_θ}\frac{1}{2m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2\blue{+1000θ_3^2+1000θ_4^2} θmin?2m1?i=1∑m?(hθ?(x(i))?y(i))2+1000θ32?+1000θ42?
  • (1000只是任意的一个比较大的数)
  • 如果要最小化修改后的函数,使其尽可能小的方法只有一个,就是使 θ3、θ4尽量小(因为二者在函数中的系数很大),变得近似于 0,在拟合的式中就相当于去掉了这两项一样(二次函数加上一些很小的项),得到新的拟合函数的图像如下:
    机器学习|机器学习(七)过拟合问题与正则化
    文章图片

  • 以上内容就是正则化背后的思想:
  • 正则化思想(如果参数值较小)
    1. 简化假设模型
    2. 更不容易出现过拟合问题
②正则化的实现
  • 对于具体的例子,很难预先挑选出相关度较低的变量,所以在正则化中要做的就是修改代价函数来缩小所有的参数,以线性回归的代价函数为例:
    H o u s i n g : ?F e a t u r e s : x 1 , x 2 , . . . , x 100 ?P a r a m e t e r s : θ 0 , θ 1 , θ 2 , . . . , θ 100 J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] min ? θ J ( θ ) \begin{aligned} &Housing:\\ &\qquad-\ Features:x_1,x_2,...,x_{100}\\ &\qquad-\ Parameters:θ_0,θ_1,θ_2,...,θ_{100}\\ &\large J(θ)=\frac{1}{2m}[\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2+\red{λ\sum_{j=1}^nθ_j^2}]\\ &{\min\limits_θ}J(θ) \end{aligned} ?Housing:? Features:x1?,x2?,...,x100?? Parameters:θ0?,θ1?,θ2?,...,θ100?J(θ)=2m1?[i=1∑m?(hθ?(x(i))?y(i))2+λj=1∑n?θj2?]θmin?J(θ)?
  • 这里有一个细节就是求和函数是从 1 开始计数的,因此不对 θ0 进行处理,实际上这样的影响也不大
  • λ 是正则化参数,其作用为控制两个不同目标之间的取舍(平衡),从而保持假设模型的相对简单,避免出现过拟合情况。第一个目标与函数方括号里的第一项有关,想要更好地去拟合训练集,第二个目标与括号里的第二项有关,想要保持参数尽量小,与正则化目标有关
  • 【机器学习|机器学习(七)过拟合问题与正则化】当 λ 取值过大时,导致对 θ1 到 θn 的惩罚度过大,每一个参数的值都接近于 0 ,使得函数中只剩下了 θ0,图像呈现为一条水平直线,发生欠拟合问题。
三、线性回归的正则化(Regularized linear regression)
  • 主要内容:将之前线性回归中所学的两种推导算法,分别基于梯度下降和正规方程,推广到正则化线性回归中去。
1. 梯度下降
  • 在没有正则化的情况下进行常规的线性回归使用梯度下降:
    R e p e a t { θ 0 : = θ 0 ? α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x 0 ( i ) θ j : = θ j ? α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) ( j = 0 , 1 , 2 , . . . , n ) } \begin{aligned} &Repeat\{ \\ &θ_0:=θ_0-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)}) - y^{(i)} )x^{(i)}_0\\ &θ_j:=θ_j-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)}) - y^{(i)} )x^{(i)}_j\qquad(j=\red{\bcancel{0}},1,2,...,n) \\ &\} \end{aligned} ?Repeat{θ0?:=θ0??αm1?i=1∑m?(hθ?(x(i))?y(i))x0(i)?θj?:=θj??αm1?i=1∑m?(hθ?(x(i))?y(i))xj(i)?(j=0 ?,1,2,...,n)}?
  • (由于惩罚项中不含有 θ0,故上式中将 θ0 对应项单独写出)
  • 更新了正则化后只对剩下的项进行了修改:
    θ j : = θ j ? α [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) + λ m θ j ] ( j = 1 , 2 , . . . , n ) θ_j:=θ_j-α\left[\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)}) - y^{(i)} )x^{(i)}_j+\red{\frac{λ}{m}θ_j}\right]\qquad(j=1,2,...,n) θj?:=θj??α[m1?i=1∑m?(hθ?(x(i))?y(i))xj(i)?+mλ?θj?](j=1,2,...,n)
  • 不难看出,方括号中的内容是对正则化后的线性回归的代价函数 J(θ) 求偏导后得到的结果。
  • 将式子中和 θ 有关的项提出来合并可以得到以下等价的式子:
    θ j : = θ j ( 1 ? α λ m ) ? α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) θ_j:=θ_j(1-α\frac{λ}{m})-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)}) - y^{(i)} )x^{(i)}_j θj?:=θj?(1?αmλ?)?αm1?i=1∑m?(hθ?(x(i))?y(i))xj(i)?
  • 通常学习率 α 会比较小而 m 却很大,所以合并后的 θ 的系数是一个略小于 1 的数,所以可以看成以下的式子,每次迭代都将参数缩小一点(向 0 更靠近一点),然后按照之前的梯度下降进行:
    θ j : = 0.99 ? θ j ? α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) θ_j:=0.99*θ_j-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)}) - y^{(i)} )x^{(i)}_j θj?:=0.99?θj??αm1?i=1∑m?(hθ?(x(i))?y(i))xj(i)?
2. 正规方程 X = [ ( x ( 1 ) ) T . . . ( x ( m ) ) T ] y = [ y ( 1 ) . . . y ( m ) ] min ? θ J ( θ ) X=\left[\begin{matrix} (x^{(1)})^T\\ ...\\ (x^{(m)})^T\\ \end{matrix}\right]\qquad\qquad y=\left[\begin{matrix} y^{(1)}\\ ...\\ y^{(m)}\\ \end{matrix}\right]\\\quad\\ \min\limits_θJ(θ) X=???(x(1))T...(x(m))T????y=???y(1)...y(m)????θmin?J(θ)
  • 没有正则化时:
    θ = ( X T X ) ? 1 X T y θ=(X^TX)^{-1}X^Ty θ=(XTX)?1XTy
  • 正则化后:
    θ = ( X T X + λ [ 011. . .1 ] ? ( n + 1 ) × ( n + 1 ) ) ? 1 X T y θ=\left(X^TX+\blue{\underbrace{λ\left[\begin{matrix} 0&\ &\ &\ &\ \\ \ &1&\ &\ &\ \\ \ &\ &1&\ &\ \\ \ &\ &\ &...&\ \\ \ &\ &\ &\ &1 \\ \end{matrix}\right]}_{(n+1)×(n+1)}}\right)^{-1}X^Ty θ=????????????XTX+(n+1)×(n+1)λ???????0? 1?1?... ?1???????????????????????1XTy
  • 对于不可逆的情况:
    • 当样本数 m ≤ 特征数 n 时会出现 X’X 不可逆的情况(奇异矩阵/退化矩阵)。
    • 在 Octave 中仍然可以使用 pinv 对不可逆的矩阵进行计算,但是在其他的编程语言的线性库里是算不出来的。
    • 在正则化中已经考虑到了这一点,只要保证 λ 严格大于 0 (λ > 0),那么以下式子就一定可逆:
      ( X T X + λ [ 011. . .1 ] ) ? 1 \left(X^TX+\blue{{λ\left[\begin{matrix} 0&\ &\ &\ &\ \\ \ &1&\ &\ &\ \\ \ &\ &1&\ &\ \\ \ &\ &\ &...&\ \\ \ &\ &\ &\ &1 \\ \end{matrix}\right]}}\right)^{-1} ???????XTX+λ???????0? 1?1?... ?1????????????????1
四、逻辑回归的正则化(Regularized logistic regression) 1. 梯度下降
  • 逻辑回归原来的代价函数:
    J ( θ ) = ? [ 1 m ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 ? y ( i ) ) l o g ( 1 ? h θ ( x ( i ) ) ) ] J(θ)=-\left[\frac{1}{m}\sum^{m}_{i=1}{y^{(i)}}log(h_θ(x^{(i)}))+{(1-y^{(i)})}log(1-h_θ(x^{(i)}))\right] J(θ)=?[m1?i=1∑m?y(i)log(hθ?(x(i)))+(1?y(i))log(1?hθ?(x(i)))]
  • 正则化以后:
    J ( θ ) = ? [ 1 m ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 ? y ( i ) ) l o g ( 1 ? h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(θ)=-\left[\frac{1}{m}\sum^{m}_{i=1}{y^{(i)}}log(h_θ(x^{(i)}))+{(1-y^{(i)})}log(1-h_θ(x^{(i)}))\right]+\red{\frac{λ}{2m}\sum^n_{j=1}θ^2_j} J(θ)=?[m1?i=1∑m?y(i)log(hθ?(x(i)))+(1?y(i))log(1?hθ?(x(i)))]+2mλ?j=1∑n?θj2?
  • 新添加的项用于惩罚变量 θ1 到 θn,避免过拟合情况的发生。
  • 具体实现:
    • 原梯度下降:
      R e p e a t { θ 0 : = θ 0 ? α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x 0 ( i ) θ j : = θ j ? α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) ( j = 0 , 1 , 2 , . . . , n ) } \begin{aligned} &Repeat\{ \\ &θ_0:=θ_0-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)}) - y^{(i)} )x^{(i)}_0\\ &θ_j:=θ_j-α\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)}) - y^{(i)} )x^{(i)}_j\qquad(j=\red{\bcancel{0}},1,2,...,n) \\ &\} \end{aligned} ?Repeat{θ0?:=θ0??αm1?i=1∑m?(hθ?(x(i))?y(i))x0(i)?θj?:=θj??αm1?i=1∑m?(hθ?(x(i))?y(i))xj(i)?(j=0 ?,1,2,...,n)}?
  • 更新了正则化后只对剩下的项进行了修改:
    θ j : = θ j ? α [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) + λ m θ j ] θ_j:=θ_j-α\left[\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)}) - y^{(i)} )x^{(i)}_j+\red{\frac{λ}{m}θ_j}\right] θj?:=θj??α[m1?i=1∑m?(hθ?(x(i))?y(i))xj(i)?+mλ?θj?]
  • 迭代公式虽然与线性回归的一样,但是由于二者的假设不同,故并不是同一个算法。
  • 上式方括号中的式子是新定义的正则化的代价函数的偏导
2. 高级优化算法中使用正则化
  • 在原来的基础上继续定义代价函数:
    f u n c t i o n[ j V a l ,g r a d i e n t ] = c o s t F u n c t i o n ( t h e t a ) j V a l = [c o d et oc o m p u t eJ ( θ ) ] ; J ( θ ) = ? [ 1 m ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 ? y ( i ) ) l o g ( 1 ? h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 g r a d i e n t ( 1 ) = [c o d et oc o m p u t e? ? θ 0 J ( θ ) ] ; 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x 0 ( i ) g r a d i e n t ( 2 ) = [c o d et oc o m p u t e? ? θ 1 J ( θ ) ] ; 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x 1 ( i ) + λ m θ 1 g r a d i e n t ( 3 ) = [c o d et oc o m p u t e? ? θ 1 J ( θ ) ] ; 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x 2 ( i ) + λ m θ 2 . . . g r a d i e n t ( n + 1 ) = [c o d et oc o m p u t e? ? θ n J ( θ ) ] ; \begin{aligned} &\blue{function\ [jVal,\ gradient] = costFunction(theta)}\\ &\qquad\qquad\blue{jVal=[}\ code\ to\ compute\ J(θ)\blue{]; }\\ &\qquad \qquad \tiny J(θ)=-\left[\frac{1}{m}\sum^{m}_{i=1}{y^{(i)}}log(h_θ(x^{(i)}))+{(1-y^{(i)})}log(1-h_θ(x^{(i)}))\right]+\red{\frac{λ}{2m}\sum^n_{j=1}θ^2_j}\\ &\qquad\qquad\blue{gradient(1)=[}\ code\ to\ compute\ \frac{\partial}{\partial θ_0}J(θ)\blue{]; }\\ &\qquad\qquad\qquad \small\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)}) - y^{(i)} )x^{(i)}_0\\ &\qquad\qquad\blue{gradient(2)=[}\ code\ to\ compute\ \frac{\partial}{\partial θ_1}J(θ)\blue{]; }\\ &\qquad\qquad\qquad \small\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)}) - y^{(i)} )x^{(i)}_1+\red{\frac{λ}{m}θ_1}\\ &\qquad\qquad\blue{gradient(3)=[}\ code\ to\ compute\ \frac{\partial}{\partial θ_1}J(θ)\blue{]; }\\ &\qquad\qquad\qquad \small\frac{1}{m}\sum_{i=1}^m (h_θ(x^{(i)}) - y^{(i)} )x^{(i)}_2+\red{\frac{λ}{m}θ_2}\\ &\qquad\qquad\blue{...}\\ &\qquad\qquad\blue{gradient(n+1)=[}\ code\ to\ compute\ \frac{\partial}{\partial θ_n}J(θ)\blue{]; }\\ \end{aligned} ?function [jVal, gradient]=costFunction(theta)jVal=[ code to compute J(θ)]; J(θ)=?[m1?i=1∑m?y(i)log(hθ?(x(i)))+(1?y(i))log(1?hθ?(x(i)))]+2mλ?j=1∑n?θj2?gradient(1)=[ code to compute ?θ0???J(θ)]; m1?i=1∑m?(hθ?(x(i))?y(i))x0(i)?gradient(2)=[ code to compute ?θ1???J(θ)]; m1?i=1∑m?(hθ?(x(i))?y(i))x1(i)?+mλ?θ1?gradient(3)=[ code to compute ?θ1???J(θ)]; m1?i=1∑m?(hθ?(x(i))?y(i))x2(i)?+mλ?θ2?...gradient(n+1)=[ code to compute ?θn???J(θ)]; ?
  • 与正则化之前相比的变化:
    • 计算 J(θ) 时后面要多加一项
    • 梯度除了第一个以外其余的后面都要多加一项。
  • 运行 costFunction 后,对它调用 fminuc 函数或者其他类似的高级优化函数,就实现了新的正则化代价函数 J(θ) 的最小化,返回的两个参数代表的就是正则化逻辑回归的解。
总结
  • 本文主要介绍了正则化的相关内容,先是通过过拟合问题来引出正则化,随后讲了正则化的应用,进而讲解了如何在线性回归和逻辑回归中对不同的算法实现正则化。
  • 简单来说,过拟合问题是对数据的拟合过度,像是为了拟合数据而拟合,导致假设函数不能实现对数据的泛化,其图像上下波动扭曲变形。
  • 正则化是通过添加惩罚项来减小特征量的在假设函数中的量级,进而实现假设模型的简化,使其更不容易出现过拟合问题。
  • 正则化在线性回归以及逻辑回归中的应用都是通过在代价函数中添加变量的惩罚项来实现的。

    推荐阅读