机器学习(三)——逻辑回归与正则化

分类及表示

在分类问题中,你要预测的变量y是离散的值,我们将学习一种叫做逻辑回归(Logistic Regression)的算法,这是目前最流行、使用最广泛的一种学习算法。在所有的这些问题中,我们想要预测的变量是变量y,我们可以认为它能够取两个值0或1,是或者不是垃圾邮件,是或者不是欺诈,恶性或良性。标记为0的类,还有一个名字,叫做负类(negative class),标记为1的类,也叫做正类(positive class)。因此0可能代表良性肿瘤,1可能标记一个恶性肿瘤,将两个类别标记为正类或负类,0或1是任意的,其实怎样都可以,但是通常从直觉上来讲,负类总是表达缺少某样东西的意思,比如缺少恶性肿瘤,而正类就会表示存在某样我们寻找的东西,但是哪个是负类,哪个是正类的定义,有时是任意的,它并不太重要。现在,我们要开始研究只有两类0和1的分类问题,以后我们将讨论多类别问题,多类别问题中的变量y的取值可以是 0 1 2 和 3,或更多,这就是所谓的多类分类问题。那我们怎样开发一个分类算法呢?应用线性回归来解决分类问题通常不是一个好主意,通常来说,对一组数据使用线性回归,你可能会很幸运,但往往不是一个好想法,所以我不会用线性回归算法来解决分类问题。这里还有一个有趣的事情,如果我们要用线性回归算法来解决一个分类问题,对于分类,我们知道y取值为0或者1,但如果你使用的是线性回归,那么假设函数的输出值可能远大于1或者远小于0,这看起来有点儿奇怪,所以我们在接下来要研究的算法就叫做逻辑回归算法,这个算法的性质是,它的输出值永远在0到1之间,并不会大于1也不会小于0。顺便说一下,逻辑回归算法是分类算法,有时候可能因为这个算法的名字中出现了“回归”使你感到困惑,这只是因为历史原因而被这样称呼,所以千万不要被迷惑。

让我们开始谈谈逻辑回归,我要给你展示假设函数的表达式,也就是说,在分类问题中,要用什么样的函数来表示我们的假设,此前我们说过,希望我们的分类器的输出值在0和1之间,因此,我们希望想出一个满足某个性质的假设函数,这个性质是它的预测值要在0和1之间。

图片11

当我们使用线性回归的时候,这是一种假设函数的形式,其中h(x)等于θ的转置乘以x,对于逻辑回归来说,我要把这个稍微改一下,把假设函数改成g(θ的转置乘以x),其中,我将定义函数g如下:当z是一个实数时,g(z)=1/(1+e^(-z)),这称为S型函数(sigmoid function)或逻辑函数。如果我们把这两个方程合并到一起,也就是说h(x)=1/(1+e^(-θ转置乘以x))。最后,我们看一下S型函数是什么样的,看起来是这样的:它开始接近0,然后上升,直到在原点处达到0.5,然后它再次变平,而且你注意S型函数,随着z趋于负无穷,g(z)趋近于零,随着z趋于正无穷,g(z)趋近于1。因为 g(z) 的取值 因为g(z)的取值在0和1之间,我们就得到h(x)的值必在0和1之间。让我们讨论一下这个模型的解释,这就是我对假设函数h(x)的输出的解释:当我的假设函数输出某个数,我会认为这个数是对于新输入样本x的y等于1的概率的估计值。我的意思是这样的:比方说,我们来看肿瘤分类的例子,我们有一个特征向量x,和平时一样x0等于1,然后我们的特征变量x1是肿瘤的大小,假设我有一个病人来了,而且知道肿瘤的大小,把他们的特征向量x代入我的假设函数,假如假设函数的输出为0.7,这个假设告诉我,对于一个特征为x的患者,y等于1的概率是0.7,换句话说,我要告诉我的病人,肿瘤是恶性的可能性是70%或者说0.7。要更加正式的写出来,我的假设函数等于P(y=1|x;θ),在给定x的条件下y=1的概率,给定的x就是我的病人的特征x,特征x代表了我的病人特定的肿瘤大小,这个概率的参数是θ。现在,因为这是一个分类的任务,我们知道y必须是0或1,因此,有了h(x)我们也可以计算y=0的概率,具体地说,y=0的概率等于1减去y=1的概率。

现在我想告诉大家一个叫做决策边界(decision boundary)的概念,这个概念能更好地帮助我们理解逻辑回归的假设函数在计算什么。现在让我们更进一步来理解,这个假设函数何时会将y预测为1,什么时候又会将y预测为0,具体地说,这个假设函数输出的是给定x时y=1的概率,因此,如果我们想预测y=1还是等于0,我们可以这样做:只要该假设函数输出y=1的概率大于或等于0.5,那么这表示y更有可能等于1而不是0,因此我们预测y=1;在另一种情况下,如果预测y=1的概率小于0.5,那么我们应该预测y=0。如果h(x)的值,正好等于0.5,那么我们可以预测为1,也可以预测为0,但是这里我们默认,如果h(x)等于0.5的话,预测选择为1,这只是一个细节,不用太在意。下面,我希望大家能够清晰地理解,什么时候h(x)将大于或等于0.5,从而我们最终预测y=1,如果我们看看S形函数的曲线图,我们会注意到,S函数只要z大于或等于0时,g(z)就将大于或等于0.5,因在曲线图的右边,g的取值大于或等于0.5。由于逻辑回归的假设函数h(x)等于g(θTx),因此函数值将会大于或等于0.5,只要θ转置乘以x大于或等于0。现在让我们来考虑,假设函数预测y=0的情况,类似的h(θ)将会小于0.5,只要θ转置乘以x小于0。总结一下我们刚才所讲的,我们看到,如果我们要决定预测y=1还是y=0,取决于y=1的概率大于或等于0.5还是小于0.5,这其实就等于说,我们将预测y=1,只需要θ转置乘以x大于或等于0,另一方面我们将预测y=0,只需要θ转置乘以x小于0。通过这些,我们能更好地理解如何利用逻辑回归的假设函数来进行预测。如果我们将h(x)等于0.5的那条线画出来,我们会发现,这条直线将整个平面分成了两部分,其中一片区域假设函数预测y等于1,而另一片区域假设函数预测y等于0,这条直线就被称为决策边界(decision boundary)。我想澄清一下,决策边界是假设函数的一个属性,决定于其参数,它不是数据集的属性。当然,我们后面还将讨论如何拟合参数,那时我们将使用训练集来确定参数的取值,但是一旦我们有确定的参数取值,我们就将完全确定决策边界,这时我们实际上并不需要在绘制决策边界的时候,绘制训练集。早些时候,当我们谈论多项式回归或线性回归时,我们谈到可以添加额外的高阶多项式项,同样我们也可以对逻辑回归使用相同的方法,通过增加这些复杂的多项式特征变量,我可以得到更复杂的决定边界,而不只是用直线分开正负样本。再次强调,决策边界不是训练集的属性,而是假设本身及其参数的属性,只要我们给定了参数向量θ,决定边界就确定了,我们不是用训练集来定义的决策边界,我们用训练集来拟合参数θ,但是一旦你有参数θ,它就确定了决策边界。逻辑回归可以用于找到决策边界。

逻辑回归模型

我们要讲如何拟合逻辑回归模型的参数θ,具体来说,我要定义用来拟合参数的优化目标或者叫代价函数。这便是监督学习问题中的逻辑回归模型的拟合问题:我们有一个训练集,里面有m个训练样本,像以前一样,我们的每个样本用n+1维的特征向量表示,同样和以前一样,x0 = 1即第一个特征变量或者说第0个特征变量一直是1,而且因为这是一个分类问题,我们的训练集具有这样的特征:所有的y不是0就是1。对于这个给定的训练集,我们如何选择或者说如何拟合参数θ?

图片12

以前我们推导线性回归时,使用了这个代价函数,我把这个写成稍微有点儿不同的形式,不写原先的1/2m,我把1/2放到求和符号里面了。现在我想用另一种方法来写代价函数,去掉这个平方项,定义这个代价函数Cost函数等于这个1/2的平方根误差,因此现在 我们能更清楚的看到,代价函数是1/m倍的这个代价项在训练集范围上的求和,所以直接定义代价值(h(X), Y)等于1/2倍的这个平方根误差。对这个代价项的理解是这样的:这是我所期望的 我的学习算法 如果想要达到这个值 也就是这个假设h(x) 所需要付出的代价 这个希望的预测值是h(x) 而实际值则是y 显然 在线性回归中 代价值会被定义为这个 这个代价值是 1/2乘以 预测值h和 实际值观测的结果y 的差的平方 这个代价值可以很好地用在线性回归里,但是我们现在要用在逻辑回归里,如果我们可以最小化代价函数J里面的这个代价值,它会工作得很好,但实际上,如果我们使用这个代价值,它会变成参数θ的非凸函数,我说的非凸函数是这个意思:对于逻辑回归来说,这里的h函数是非线性的,如果对它取Sigmoid函数,然后求它的代价值,再画出J(θ)长什么模样,你会发现J(θ)可能有很多局部最优值,称呼它的正式术语是非凸函数,你大概可以发现,如果你把梯度下降法用在一个这样的函数上,不能保证它会收敛到全局最小值,相应地,我们希望我们的代价函数J(θ)是一个凸函数,是一个单弓形函数,如果对它使用梯度下降法,我们可以保证梯度下降法会收敛到该函数的全局最小值。但使用这个平方代价函数的问题是,因为中间的这个非常非线性的sigmoid函数的出现,导致J(θ)成为一个非凸函数,所以我们想做的是,另外找一个不同的代价函数,它是凸函数,使得我们可以使用梯度下降法,而且能保证找到全局最小值,这个代价函数便是我们要用在逻辑回归上的:

图片13

我们认为这个算法要付的代价或者惩罚,假如说预测值h(x)是一个数,比如0.7,而实际上真实的标签值是y,那么当y=1时,代价值将等于-log(h(X)),以及当y=0时,-log(1-h(X))。如果y等于1,那么这个代价函数是-log(h(X)),如果我们将h(X)画在横坐标上,我们知道假设函数的输出值是在0和1之间的,所以h(X)的值在0和1之间变化,如果你画出这个代价函数的样子,你会发现它看起来是这样:由0到1逐渐递减,在0时趋向于无穷大,在1时等于0。现在这个代价函数,有一些有趣而且很好的性质,首先你注意到,如果y=1而且h(X)=1,也就是说如果假设函数刚好预测值是1,而且y刚好等于我预测的,那么这个代价值等于0。同样注意到h(x)趋于0时,代价值激增,并且趋于无穷。如果假设函数输出0,然而实际的y值等于1,那么我们用非常非常大的代价值惩罚这个学习算法,它就是被这样体现出来。这是y=1时的情况,我们再来看看y=0时代价值函数是什么样,如果画出函数-log(1-z),那么你得到的代价函数实际上是这样:它从0到1逐渐递增,在0时等于0,在1时趋向于无穷大。它现在所做的是,在h(X)趋于1时激增,因为它是说,如果最后发现y等于0,而我们却几乎非常肯定地预测y=1,那么我们最后就要付出非常大的代价值。反过来,如果h(x)=0,而且y=0,那么假设函数预测对了,那么代价值应该等于0。这就是单训练样本的代价函数,我们所选的代价值函数会给我们一个凸优化问题,代价函数J(θ)会是一个凸函数,并且没有局部最优值。

我们将会找出一种稍微简单一点的方法来写代价函数,来替换我们现在用的方法,同时我们还要弄清楚,如何运用梯度下降法来拟合出逻辑回归的参数。具体来说,为了避免分成y=1或y=0两种情况来写,我们要用一种方法,来把这两个式子合并成一个,这将使我们更方便地写出代价函数,并推导出梯度下降。具体而言,我们可以如下写出代价函数Cost(h(x), y):

图片14

这个表达式或等式,与我们已经得出的代价函数的表达是完全等效的,并且更加紧凑。这样我们就可以写出逻辑回归的代价函数,它就是1/m乘以后面这个Cost函数,我们把负号放在外面,我们为什么要把代价函数写成这种形式,似乎我们也可以选择别的方法来写代价函数,我可以告诉你,这个式子是从统计学中的极大似然法得来的,估计,统计学的思路是如何为不同的模型,有效地找出不同的参数,同时它还有一个很好的性质,它是凸的。因此,这就是基本上大部分人使用的逻辑回归代价函数。根据这个代价函数,为了拟合出参数我们怎么办呢?我们要试图找尽量让J(θ)取得最小值的参数θ,所以我们想要尽量减小这一项,这将我们将得到某个参数θ。我们最小化代价函数的方法是使用梯度下降法(gradient descent),这就是我们的梯度下降法:

图片2

如果你有n个特征,也就是说参数向量θ包括 θ0 θ1 θ2 一直到 θn,那么你就需要用这个式子来同时更新所有θ的值。现在,如果你把这个更新规则和我们之前用在线性回归上的进行比较的话,你会惊讶地发现,这个式子正是我们用来做线性回归梯度下降的,那么,线性回归和逻辑回归是同一个算法吗?要回答这个问题,我们要观察逻辑回归,看看发生了哪些变化,实际上,假设的定义发生了变化,所以对于线性回归,假设函数是h(x)为θ转置乘以x,而现在逻辑函数假设的定义已经发生了变化,因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降跟线性回归的梯度下降实际上是两个完全不同的东西。当我们在谈论线性回归的梯度下降法时,我们谈到了如何监控梯度下降法以确保其收敛,我通常也把同样的方法用在逻辑回归中来监测梯度下降,以确保它正常收敛。当使用梯度下降法来实现逻辑回归时,我们有这些不同的参数θ,就是θ0到θn,我们需要用这个表达式来更新这些参数,我们还可以使用for循环来实现,所以for i=0 to n或者for i=1 to n+1,当然,不用for循环也是可以的,理想情况下,我们更提倡使用向量化的实现,向量化的实现可以把所有这些n个参数同时更新,一举搞定。最后还有一个,我们之前在谈线性回归时讲到的特征缩放,我们看到了特征缩放是如何提高梯度下降的收敛速度的,这个特征缩放的方法也适用于逻辑回归,如果你的特征范围差距很大的话,那么应用特征缩放的方法,同样也可以让逻辑回归中梯度下降收敛更快。

现在我想教你们一些高级优化算法和一些高级的优化概念,利用这些方法,我们就能够使通过梯度下降进行逻辑回归的速度大大提高,而这也将使算法更加适合解决大型的机器学习问题,比如,我们有数目庞大的特征量。现在我们换个角度,来看什么是梯度下降,我们有个代价函数J,而我们想要使其最小化,那么我们需要做的是编写代码,当输入参数θ时,它们会计算出两样东西J(θ)以及J等于0 1直到 n 时的偏导数项,假设我们已经完成了可以实现这两件事的代码,那么梯度下降所做的就是,反复执行这些更新。因此另一种考虑梯度下降的思路是,我们需要写出代码来计算J(θ)这些偏导数,然后把这些插入到梯度下降中,然后它就可以为我们最小化这个函数,对于梯度下降来说,我认为从技术上讲,你实际并不需要编写代码来计算代价函数J(θ),你只需要编写代码来计算导数项,但是,如果你希望代码还要能够监控这些J(θ)的收敛性,那么我们就需要自己编写代码来计算代价函数和偏导数项。所以,在写完能够计算这两者的代码之后,我们就可以使用梯度下降,但梯度下降并不是我们可以使用的唯一算法,还有其他一些算法,更高级、更复杂,如果我们能用这些方法,那么这些算法就是为我们优化代价函数的不同方法 ,共轭梯度法、BFGS(变尺度法)和L-BFGS(限制变尺度法)就是其中一些更高级的优化算法,它们需要有一种方法来计算J(θ),以及需要一种方法计算导数项,然后使用比梯度下降更复杂的算法来最小化代价函数。这三种算法有许多优点,一个是,使用这其中任何一个算法,你通常不需要手动选择学习率α,所以对于这些算法的一种思路是,给出计算导数项和代价函数的方法,你可以认为算法有一个智能的内部循环,而且事实上,他们确实有一个智能的内部循环,称为线性搜索(line search)算法,它可以自动尝试不同的学习速率α,并自动选择一个好的学习速率α,因此它甚至可以为每次迭代选择不同的学习速率,那么你就不需要自己选择,这些算法实际上在做更复杂的事情,而不仅仅是选择一个好的学习速率,所以它们往往最终收敛得远远快于梯度下降。如果说这些算法有缺点的话,那么我想说主要缺点是它们比梯度下降法复杂多了。我必须指出,这些算法实现得好或不好是有区别的,因此,如果你正在你的机器学习程序中使用一种不同的语言,比如如果你正在使用C C + + Java等等,你可能会想尝试一些不同的库,以确保你找到一个能很好实现这些算法的库。因此现在让我们来说明,如何使用这些算法,在逻辑回归中,我们有一个参数向量theta,我们的参数theta由 θ0 到 θn 组成,因为在Octave的标号中,向量的标号是从1开始的,在Octave里θ0实际上写成theta(1),因此用theta(1)表示第一个参数θ0,然后有theta(2),接下来写到theta(n+1),我们需要做的是,写一个costFunction函数,它为逻辑回归求得代价函数,具体点说costFunction函数需要返回jVal值,因此需要一些代码来计算J(θ),我们也需要给出梯度值gradient,那么gradient(1)对应用来计算代价函数关于θ0的偏导数,接下去关于θ1的偏导数,依此类推,再次强调,这是gradient(1) gradient(2)等等,而不是gradient(0) gradient(1),因为Octave的标号是从1开始,而不是从0开始的。运行这个costFunction函数后,你就可以调用高级的优化函数了。

function [jVal, gradient] = costFunction(theta)
    jVal = [code to compute J(θ)];
    gradient(1) = [code to compute (∂/∂θ0)*J(θ)];
    gradient(2) = [code to compute (∂/∂θ1)*J(θ)];
       .
       .
       .
    gradient(n+1) = [code to compute (∂/∂θn)*J(θ)];

多类别分类

我们将谈到如何使用逻辑回归(logistic regression)来解决多类别分类问题,具体来说,我想通过一个叫做"一对多"(one-vs-all)的分类算法,让你了解什么是多类别分类问题。现在我们有一个训练集,有三个类别,y=1 y=2 y=3,我们下面要做的就是,使用一个训练集,将其分成三个二元分类问题,我们先从类别1开始,实际上我们可以创建一个新的"伪"训练集,类型2和类型3定为负类,类型1设定为正类,我们要拟合出一个合适的分类器,我们称其为h下标θ上标(1)(x),这里上标(1)表示类别1,下面,我们将为类别2做同样的工作,这样我们找到第二个合适的逻辑回归分类器,我们称为h下标θ上标(2)(x),其中上标(2)表示是类别2,最后,同样地,我们对第三个类别采用同样的方法,并找出第三个分类器h下标θ上标(3)(x)。总而言之,我们已经拟合出三个分类器,对于i等于1、2、3,我们都找到了一个分类器h上标(i)下标θ(x),通过这样来尝试 估计出,给出x和先验θ时y的值等于i的概率。h(1)实际上是在计算给定x以θ为参数时,y的值为1的概率是多少,同样地,可以计算出y=2的概率和其它的概率值来。现在我们便有了三个分类器,且每个分类器都作为其中一种情况进行训练。

解决过度拟合的问题

到现在为止,你已经见识了几种不同的学习算法,包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过度拟合(over-fitting)的问题,可能会导致它们效果很差。我将为你解释什么是过度拟合问题,并且我们将谈论一种称为正则化(regularization)的技术,它可以改善或者减少过度拟合问题,以使学习算法更好实现。如果一个算法没有很好拟合训练数据,我们把这个问题称为欠拟合(underfitting),另一个术语叫做高偏差(bias),这个词是过去传下来的一个专业名词,它的意思是,如果拟合一条直线到训练数据,就好像算法有一个很强的偏见,或者说非常大的偏差。换个角度,如果我们拟合一个高阶多项式,那么这个函数能很好的拟合训练集,能拟合几乎所有的训练数据,这就面临可能函数太过庞大的问题,变量太多,同时如果我们没有足够的数据去约束这个变量过多的模型,那么这就是过度拟合或过拟合(overfitting),另一个描述该问题的术语是高方差(variance),高方差是另一个历史上的叫法。在两者之间的情况,叫"刚好合适",这并不是一个真正的名词,我只是把它写在这里。概括地说,过度拟合的问题将会在变量过多的时候发生,这种时候训练出的方程总能很好的拟合训练数据,所以你的代价函数实际上可能非常接近于0,或者就是0,但是这样的曲线,它千方百计的拟合于训练数据,这样导致它无法泛化到新的数据样本中,以至于无法预测新样本价格。在这里术语"泛化"指的是一个假设模型能够应用到新样本的能力。具体地说,如果我们有过多的变量,同时只有非常少的训练数据,就会出现过度拟合的问题。为了解决过度拟合,有两个办法来解决问题,第一个办法是要尽量减少选取变量的数量,具体而言,我们可以人工检查变量的条目,并以此决定哪些变量更为重要,然后决定保留哪些特征变量,哪些应该舍弃(在之后我们会提到模型选择算法,这种算法是为了,自动选择采用哪些特征变量,自动舍弃不需要的变量,这种减少特征变量的做法是非常有效的,并且可以减少过拟合的发生),但是其缺点是,舍弃一部分特征变量,你也舍弃了问题中的一些信息;第二个办法就是正则化,正则化中我们将保留所有的特征变量,这个方法非常有效,当我们有很多特征变量时,其中每一个变量都能对预测产生一点影响。

在这段中,我将传达给你一个直观的感受,告诉你正规化是如何进行的,而且我们还要写出,我们使用正规化时需要使用的代价函数。这里给出了正规化背后的思路:这种思路就是,如果我们的参数值对应一个较小值的话,就是说参数值比较小,那么往往我们会得到一个形式更简单的假设,因此就不易发生过拟合的问题。如果我们有一个袋子里有一百个特征,在这个袋子里,我们是很难提前选出那些关联度更小的特征的,也就是说如果我们有一百零一个参数,我们并不知道如何选择参数,如何缩小参数的数目,因此在正规化里,我们要做的事情就是把我们的代价函数做一些修改,从而缩小我所有的参数值,因为我不知道是哪一个或两个要去缩小。所以我就修改我的代价函数如下:

图片15

这就是正则化后的代价函数,这和之前线性回归的代价函数基本一样,只是在这后面添加了一项,就是我们在方括号里的这项,我们称其为正则化项,并且λ我们称做正规化参数,λ要做的就是,控制在两个不同的目标中的一个平衡关系,第一个目标就是我们希望假设能够很好的适应训练集,而第二个目标是我们想要保持参数值较小,从而来保持假设的形式相对简单,来避免过度的拟合。当我添加一个额外的正则化项的时候,我们收缩了每个参数,并且因此,我们会使我们所有的参数θ1 θ2 θ3直到θ100的值变小,顺便说一下,我实际上没有去惩罚θ0,因此θ0的值是大的,这是从1到n的求和,而不是从0到n的求和,但其实在实践中,无论你是否包括θ0这项,结果只有非常小的差异,但是按照惯例,通常情况下我们还是只从θ1到θ100进行正规化。在正规化线性回归中,如果正规化参数值被设定为非常大,那么将会发生什么呢?我们将会非常大地惩罚参数θ1 θ2 θ3 θ4,那么我们会使所有这些参数接近于零,如果我们这么做,那么就是我们的假设中相当于去掉了这些参数项,并且我们只是留下了一个简单的假设,这个假设就等于θ0的值,那就是类似于拟合了一条水平直线,对于数据来说,这就是一个欠拟合(underfitting)。因此,为了使正则化运作良好,我们应该去选择一个不错的正则化参数λ。

对于线性回归的求解,我们之前推导了两种学习算法,一种基于梯度下降,一种基于正规方程,在这段中,我们将继续学习这两个算法,并把它们推广到正则化线性回归中去。以下就是我们用于最小化正则化代价函数J(θ)的梯度下降算法:

图片16

你可以发现我把θ0的更新和θ1 θ2到θn的更新分离开来,我这样做的原因是,你可能还记得,对于正则化的线性回归,我们惩罚参数θ1 θ2…一直到θn,但是我们不惩罚θ0。如果你仔细看θj的更新,你会发现一些有趣的东西,具体来说θj的每次更新 都是,θj自己减去α乘以原来的无正则项加上新的一项,这一项的大小也取决于θj,所以,如果你把所有这些取决于θj的合在一起的话,这个更新可以等价地写为如下的形式:

图片17

这一项:1减去α乘以λ除以m,很有意思,具体来说,这一项的值通常是一个具体的实数,而且小于1。因为α乘以λ除以m通常情况下是正的,如果你的学习速率小,而m很大的话,(1 – αλ/m)这一项通常是很小的,所以这一项,一般来说将是一个比1小一点点的值。所以我们可以把它想成一个像0.99一样的数字,所以对θj更新的结果,我们可以看作是被替换为θj的0.99倍,也就是把θj向0压缩了一点点,所以这使得θj小了一点,更正式地说θj的平方范数更小了。另外,这一项后边的第二项,这实际上与我们原来的梯度下降更新完全一样。当我们使用正则化线性回归时,我们需要做的就是,在每一个被正规化的参数θj上乘以了一个比1小一点点的数字,也就是把参数压缩了一点,然后我们执行跟以前一样的更新,当然这仅仅是从直观上认识这个更新在做什么,从数学上讲,它就是带有正则化项的J(θ)的梯度下降算法。梯度下降只是我们拟合线性回归模型的两种算法的其中一个,第二种算法是使用正规方程,现在如果我们用了是正则化,我们想要得到最小值,我们来看看应该怎么得到,推导的方法是,取J关于各个参数的偏导数,并令它们等于0,然后做些数学推导,你可以得到这样的一个式子,它使得代价函数最小:

图片18

具体的说,如果你使用正则化,那么公式要做如下改变:括号里结尾添这样一个矩阵:它的左上角的元素是0,其余对角线元素都是1,剩下的元素也都是0,该矩阵是一个(n+1) × (n+1)维的矩阵。最后,我想快速地谈一下不可逆性的问题,现在考虑m,即样本总数小与或等于特征数量n,那么这个矩阵X转置乘以X将是不可逆或奇异的(singluar),或者用另一种说法是,这个矩阵是退化(degenerate)的。幸运的是,正规化为我们解决了这个问题,具体地说,只要正则参数是严格大于0的,实际上,可以证明该矩阵X转置乘以X加上λ乘以这里这个矩阵,将不是奇异的,即该矩阵将是可逆的。因此,使用正则化还可以照顾一些X转置乘以X不可逆的问题。



发表评论

电子邮件地址不会被公开。 必填项已用*标注