仍是来看预测房价的这个例子,咱们先对该数据作线性回归,也就是左边第一张图。html
若是这么作,咱们能够得到拟合数据的这样一条直线,可是,实际上这并非一个很好的模型。咱们看看这些数据,很明显,随着房子面积增大,住房价格的变化趋于稳定或者说越往右越平缓。所以线性回归并无很好拟合训练数据。算法
咱们把此类状况称为欠拟合(underfitting),或者叫做叫作高误差(bias)。函数
这两种说法大体类似,都表示没有很好地拟合训练数据。高误差这个词是 machine learning 的研究初期传下来的一个专业名词,具体到这个问题,意思就是说若是用线性回归这个算法去拟合训练数据,那么该算法实际上会产生一个很是大的误差或者说存在一个很强的偏见。学习
第二幅图,咱们在中间加入一个二次项,也就是说对于这幅数据咱们用二次函数去拟合。天然,能够拟合出一条曲线,事实也证实这个拟合效果很好。优化
另外一个极端状况是,若是在第三幅图中对于该数据集用一个四次多项式来拟合。所以在这里咱们有五个参数θ0到θ4,这样咱们一样能够拟合一条曲线,经过咱们的五个训练样本,咱们能够获得如右图的一条曲线。lua
一方面,咱们彷佛对训练数据作了一个很好的拟合,由于这条曲线经过了全部的训练实例。可是,这其实是一条很扭曲的曲线,它不停上下波动。所以,事实上咱们并不认为它是一个预测房价的好模型。spa
因此,咱们把这类状况叫作过拟合(overfitting),也叫高方差(variance)。3d
与高误差同样,高方差一样也是一个历史上的叫法。从第一印象上来讲,若是咱们拟合一个高阶多项式,那么这个函数能很好的拟合训练集(能拟合几乎全部的训练数据),但这也就面临函数可能太过庞大的问题,变量太多。指针
同时若是咱们没有足够的数据集(训练集)去约束这个变量过多的模型,那么就会发生过拟合。视频
过分拟合的问题一般发生在变量(特征)过多的时候。这种状况下训练出的方程老是能很好的拟合训练数据,也就是说,咱们的代价函数可能很是接近于 0 或者就为 0。
可是,这样的曲线想方设法的去拟合训练数据,这样会致使它没法泛化到新的数据样本中,以致于没法预测新样本价格。在这里,术语"泛化"指的是一个假设模型可以应用到新样本的能力。新样本数据是指没有出如今训练集中的数据。
以前,咱们看到了线性回归状况下的过拟合。相似的状况也适用于逻辑回归。
那么,若是发生了过拟合问题,咱们应该如何处理?
过多的变量(特征),同时只有很是少的训练数据,会致使出现过分拟合的问题。所以为了解决过分拟合,有如下两个办法。
方法一:尽可能减小选取变量的数量
具体而言,咱们能够人工检查每一项变量,并以此来肯定哪些变量更为重要,而后,保留那些更为重要的特征变量。至于,哪些变量应该舍弃,咱们之后在讨论,这会涉及到模型选择算法,这种算法是能够自动选择采用哪些特征变量,自动舍弃不须要的变量。这类作法很是有效,可是其缺点是当你舍弃一部分特征变量时,你也舍弃了问题中的一些信息。例如,也许全部的特征变量对于预测房价都是有用的,咱们实际上并不想舍弃一些信息或者说舍弃这些特征变量。
方法二:正则化
正则化中咱们将保留全部的特征变量,可是会减少特征变量的数量级(参数数值的大小θ(j))。
这个方法很是有效,当咱们有不少特征变量时,其中每个变量都能对预测产生一点影响。正如咱们在房价预测的例子中看到的那样,咱们能够有不少特征变量,其中每个变量都是有用的,所以咱们不但愿把它们删掉,这就致使了正则化概念的发生。
接下来咱们会讨论怎样应用正则化和什么叫作正则化均值,而后将开始讨论怎样使用正则化来使学习算法正常工做,并避免过拟合。
在前面的介绍中,咱们看到了若是用一个二次函数来拟合这些数据,那么它给了咱们一个对数据很好的拟合。然而,若是咱们用一个更高次的多项式去拟合,最终咱们可能会获得一个曲线,它能很好地拟合训练集,但却并非一个好的结果,由于它过分拟合了数据,所以,通常性并非很好。
让咱们考虑下面的假设,咱们想要加上惩罚项,从而使参数 θ3 和 θ4 足够的小。
这里个人意思就是,上图的式子是咱们的优化目标,也就是说咱们须要尽可能减小代价函数的均方偏差。
对于这个函数咱们对它添加一些项,加上 1000 乘以 θ3 的平方,再加上 1000 乘以 θ4 的平方,
1000 只是我随便写的某个较大的数字而已。如今,若是咱们要最小化这个函数,那么为了最小化这个新的代价函数,咱们要让 θ3 和 θ4 尽量小。由于,若是你在原有代价函数的基础上加上 1000 乘以 θ3 这一项 ,那么这个新的代价函数将变得很大,因此,当咱们最小化这个新的代价函数时, 咱们将使 θ3 的值接近于 0,一样 θ4 的值也接近于 0,就像咱们忽略了这两个值同样。若是咱们作到这一点( θ3 和 θ4 接近 0 ),那么咱们将获得一个近似的二次函数。
所以,咱们最终恰当地拟合了数据,咱们所使用的正是二次函数加上一些很是小,贡献很小项(由于这些项的 θ3、 θ4 很是接近于0)。显然,这是一个更好的假设。
更通常地,这里给出了正规化背后的思路。这种思路就是,若是咱们的参数值对应一个较小值的话(参数值比较小),那么每每咱们会获得一个形式更简单的假设。
在咱们上面的例子中,咱们惩罚的只是 θ3 和 θ4 ,使这两个值均接近于零,从而咱们获得了一个更简单的假设,实际上这个假设大抵上是一个二次函数。
但更通常地说,若是咱们像惩罚 θ3 和 θ4 这样惩罚其它参数,那么咱们每每能够获得一个相对较为简单的假设。
实际上,这些参数的值越小,一般对应于越光滑的函数,也就是更加简单的函数。所以 就不易发生过拟合的问题。
我知道,为何越小的参数对应于一个相对较为简单的假设,对你来讲如今不必定彻底理解,可是在上面的例子中使 θ3 和 θ4 很小,而且这样作能给咱们一个更加简单的假设,这个例子至少给了咱们一些直观感觉。
来让咱们看看具体的例子,对于房屋价格预测咱们可能有上百种特征,与刚刚所讲的多项式例子不一样,咱们并不知道 θ3 和 θ4 是高阶多项式的项。因此,若是咱们有一百个特征,咱们并不知道如何选择关联度更好的参数,如何缩小参数的数目等等。
所以在正则化里,咱们要作的事情,就是把减少咱们的代价函数(例子中是线性回归的代价函数)全部的参数值,由于咱们并不知道是哪个或哪几个要去缩小。
所以,咱们须要修改代价函数,在这后面添加一项,就像咱们在方括号里的这项。当咱们添加一个额外的正则化项的时候,咱们收缩了每一个参数。
顺便说一下,按照惯例,咱们没有去惩罚 θ0,所以 θ0 的值是大的。这就是一个约定从 1 到 n 的求和,而不是从 0 到 n 的求和。但其实在实践中
这只会有很是小的差别,不管你是否包括这 θ0 这项。可是按照惯例,一般状况下咱们仍是只从 θ1 到 θn 进行正则化。
下面的这项就是一个正则化项
λ 要作的就是控制在两个不一样的目标中的平衡关系。
第一个目标就是咱们想要训练,使假设更好地拟合训练数据。咱们但愿假设可以很好的适应训练集。
而第二个目标是咱们想要保持参数值较小。(经过正则化项)
而 λ 这个正则化参数须要控制的是这二者之间的平衡,即平衡拟合训练的目标和保持参数值较小的目标。从而来保持假设的形式相对简单,来避免过分的拟合。
对于咱们的房屋价格预测来讲,咱们以前所用的很是高的高阶多项式来拟合,咱们将会获得一个很是弯曲和复杂的曲线函数,如今咱们只须要使用正则化目标的方法,那么你就能够获得一个更加合适的曲线,但这个曲线不是一个真正的二次函数,而是更加的流畅和简单的一个曲线。这样就获得了对于这个数据更好的假设。
再一次说明下,这部份内容的确有些难以明白,为何加上参数的影响能够具备这种效果?但若是你亲自实现了正规化,你将可以看到这种影响的最直观的感觉。
在正则化线性回归中,若是正则化参数值 λ 被设定为很是大,那么将会发生什么呢?
咱们将会很是大地惩罚参数θ1 θ2 θ3 θ4 … 也就是说,咱们最终惩罚θ1 θ2 θ3 θ4 … 在一个很是大的程度,那么咱们会使全部这些参数接近于零。
若是咱们这么作,那么就是咱们的假设中至关于去掉了这些项,而且使咱们只是留下了一个简单的假设,这个假设只能代表房屋价格等于 θ0 的值,那就是相似于拟合了一条水平直线,对于数据来讲这就是一个欠拟合 (underfitting)。这种状况下这一假设它是条失败的直线,对于训练集来讲这只是一条平滑直线,它没有任何趋势,它不会去趋向大部分训练样本的任何值。
这句话的另一种方式来表达就是这种假设有过于强烈的"偏见" 或者太高的误差 (bais),认为预测的价格只是等于 θ0 。对于数据来讲这只是一条水平线。
所以,为了使正则化运做良好,咱们应当注意一些方面,应该去选择一个不错的正则化参数 λ 。当咱们之后讲到多重选择时咱们将讨论一种方法来自动选择正则化参数 λ ,为了使用正则化,接下来咱们将把这些概念应用到到线性回归和逻辑回归中去,那么咱们就可让他们避免过分拟合了。
以前咱们已经介绍过,岭回归的代价函数以下:
对于线性回归(的求解),咱们以前运用了两种学习算法,一种基于梯度降低,一种基于正规方程。
梯度降低,以下:
正规方程,以下:
如今考虑 M(即样本量), 比 N(即特征的数量)小或等于N。
经过以前的博文,咱们知道若是你只有较少的样本,致使特征数量大于样本数量,那么矩阵 XTX 将是不可逆矩阵或奇异(singluar)矩阵,或者用另外一种说法是这个矩阵是退化(degenerate)的,那么咱们就没有办法使用正规方程来求出 θ 。
幸运的是,正规化也为咱们解决了这个问题,具体的说只要正则参数是严格大于零,实际上,能够证实以下矩阵:
将是可逆的。所以,使用正则还能够照顾任何 XTX 不可逆的问题。
因此,你如今知道如何实现岭回归,利用它,你就能够避免过分拟合,即便你在一个相对较小的训练集里有不少特征。这应该可让你在不少问题上更好的运用线性回归。
在接下来的视频中,咱们将把这种正则化的想法应用到 Logistic 回归,这样咱们就可让 logistic 回归也避免过分拟合,从而表现的更好。
Regularized Logistic Regression 实际上与 Regularized Linear Regression 是十分类似的。
一样使用梯度降低:
若是在高级优化算法中,使用正则化技术的话,那么对于这类算法咱们须要本身定义costFunction。
For those methods what we needed to do was to define the function that's called the cost function.
这个咱们自定义的 costFunction 的输入为向量 θ ,返回值有两项,分别是代价函数 jVal 以及 梯度gradient。
总之咱们须要的就是这个自定义函数costFunction,针对Octave而言,咱们能够将这个函数做为参数传入到 fminunc 系统函数中(fminunc 用来求函数的最小值,将@costFunction做为参数代进去,注意 @costFunction 相似于C语言中的函数指针),fminunc返回的是函数 costFunction 在无约束条件下的最小值,即咱们提供的代价函数 jVal 的最小值,固然也会返回向量 θ 的解。
上述方法显然对正则化逻辑回归是适用的。