7、正则化(Regularization)
7.1 过拟合的问题
  到现在为⽌,我们已经学习了⼏种不同的学习算法,包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应⽤到某些特定的机器学习应⽤时,会遇到过拟合(over-fitting)的问题,可能会导致它们效果很差。
  在这段视频中,我将为你解释什么是过度拟合问题,并且在此之后接下来的⼏个视频中,我们将谈论⼀种称为正则化(regularization)的技术,它可以改善或者减少过度拟合问题。
如果我们有⾮常多的特征,我们通过学习得到的假设可能能够⾮常好地适应训练集(代价函数可能⼏乎为0),但是可能会不能推⼴到新的数据。
下图是⼀个回归问题的例⼦:
第⼀个模型是⼀个线性模型,⽋拟合,不能很好地适应我们的训练集;第三个模型是⼀个四次⽅的模型,过于强调拟合原始数据,⽽丢失了算法的本质:预测新数据。我们可以看出,若给出⼀个新的值使之预测,它将表现的很差,是过拟合,虽然能⾮常好地适应我们的训练集但在新输⼊变量进⾏预测时可能会效果不好;⽽中间的模型似乎最合适。
分类问题中也存在这样的问题:
就以多项式理解,x$的次数越⾼,拟合的越好,但相应的预测的能⼒就可能变差。
问题是,如果我们发现了过拟合问题,应该如何处理?
1. 丢弃⼀些不能帮助我们正确预测的特征。可以是⼿⼯选择保留哪些特征,或者使⽤⼀些模型选择的算法来帮忙(例如PCA)
2. 正则化。保留所有的特征,但是减少参数的⼤⼩(magnitude)。
7.2 代价函数
上⾯的回归问题中如果我们的模型是:
  我们可以从之前的事例中看出,正是那些⾼次项导致了过拟合的产⽣,所以如果我们能让这些⾼次项的系数接近于0的话,我们就能很好的拟合了。
  所以我们要做的就是在⼀定程度上减⼩这些参数θ的值,这就是正则化的基本⽅法。我们决定要减少θ3和θ4的⼤⼩,我们要做的便是修改代价函数,在其中θ3和θ4设置⼀点惩罚。这样做的话,我们在尝试最
⼩化代价时也需要将这个惩罚纳⼊考虑中,并最终导致选择较⼩⼀些的θ3和θ4。修改后的代价函数如下:
通过这样的代价函数选择出的θ3和θ4对预测结果的影响就⽐之前要⼩许多。假如我们有⾮常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进⾏惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。这样的结果是得到了⼀个较为简单的能防⽌过拟合问题的假设:
其中 称为正则化参数(Regularization Parameter)。注:根据惯例,我们不对 0  进⾏惩罚。经过正则化处理的模型与原模型的可能对⽐如下图所⽰:
  如果选择的正则化参数λ⼤,则会把所有的参数都最⼩化了,导致模型变成 hθ(x)=θ0,也就是上图中红⾊直线所⽰的情况,造成⽋拟合。
  那为什么增加的⼀项可以使θ的值减⼩呢?
  因为如果我们令      的值很⼤的话,为了使Cost Function 尽可能的⼩,所有的θ的值(不包括θ0)都会在⼀定程度上减⼩。但若  的值太⼤了,那么θ的值(不包括θ0)都会趋近于0,这样我们所得到的只能是⼀条平⾏于x轴的直线。所以对于正则化,我们要取⼀个合理
的    的值,这样才能更好的应⽤正则化。回顾⼀下代价函数,为了使⽤正则化,让我们把这些概念应⽤
到到线性回归和逻辑回归中去,那么我们就可以让他们避免过度拟合了。
7.3 正则化线性回归
对于线性回归的求解,我们之前推导了两种学习算法:⼀种基于梯度下降,⼀种基于正规⽅程。
正则化线性回归的代价函数为:
如果我们要使⽤梯度下降法令这个代价函数最⼩化,因为我们未对进⾏正则化,所以梯度下降算法将分两种情形:
对上⾯的算法中  = 1,2, . . . ,    时的更新式⼦进⾏调整可得:
可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令 值减少了⼀个额外的值。
我们同样也可以利⽤正规⽅程来求解正则化线性回归模型,⽅法如下所⽰:
图中的矩阵尺⼨为 (n+1)*(n+1)。
7.4 正则化的逻辑回归模型
  针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们⾸先学习了使⽤梯度下降法来优化代价函数 ( ),接下来学习了更⾼级的优化算法,这些⾼级优化算法需要你⾃⼰设计代价函数 ( )。
⾃⼰计算导数同样对于逻辑回归,我们也给代价函数增加⼀个正则化的表达式,得到代价函数:
python代码:
1 import numpy as np
2 def costReg(theta, X, y, learningRate):
3    theta = np.matrix(theta)
4    X = np.matrix(X)正则化的具体做法
5    y = np.matrix(y)
6    first = np.multiply(-y, np.log(sigmoid(X*theta.T)))
7    second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T)))
8    reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:the
9 ta.shape[1]],2))
10    return np.sum(first - second) / (len(X)) + reg
要最⼩化该代价函数,通过求导,得出梯度下降算法为:
注:看上去同线性回归⼀样,但是知道 hθ(x)=g(θT X),所以与线性回归不同。
Octave 中,我们依旧可以⽤fminuc函数来求解代价函数最⼩化的参数,值得注意的是参数θ0的更新规则与其他情况不同。注意:
1. 虽然正则化的逻辑回归中的梯度下降和正则化的线性回归中的表达式看起来⼀样,但由于两者的hθ(x)不同所以还是有很⼤差别。
2. θ0不参与其中的任何⼀个正则化。
  ⽬前⼤家对机器学习算法可能还只是略懂,但是⼀旦你精通了线性回归、⾼级优化算法和正则化技术,坦率地说,你对机器学习的理解可能已经⽐许多⼯程师深⼊了。现在,你已经有了丰富的机器学习知识,⽬测⽐那些硅⾕⼯程师还厉害,或者⽤机器学习算法来做产品。
  接下来的课程中,我们将学习⼀个⾮常强⼤的⾮线性分类器,⽆论是线性回归问题,还是逻辑回归问题,都可以构造多项式来解决。你将逐渐发现还有更强⼤的⾮线性分类器,可以⽤来解决多项式回归问题。我们接下来将将学会,⽐现在解决问题的⽅法强⼤N倍的学习算法。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。