Chapter7:正则化 Regularization:AndrewNg吴恩达《机器学习》笔记
文章目录
7.1 过拟合的问题 over-fitting
7.1.1 过拟合和正则化
-
到现在为止,我们已经学习了几种不同的学习算法,包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过拟合(over-fitting)的问题,可能会导致它们效果很差。
-
在这节中,我将为你解释什么是过度拟合问题,并且在此之后接下来的几节中,我们将谈论一种称为正则化(regularization)的技术,它可以改善或者减少过度拟合问题。
7.1.2 回归问题 中的过拟合
- 一个问题的三种模型:
-
模型一:是一个线性模型,欠拟合,高偏见,不能很好地适应我们的训练集。
-
模型二:刚刚好。兼顾了 原始数据的拟合 + 预测新数据的能力。
-
模型三:是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。过拟合。
-
对于模型三,我们可以看出,若给出一个新的值使之预测,它将表现的很差,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适。
-
如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集(代价函数可能几乎为0),但是可能会不能推广到新的数据。这就是过拟合的问题。
7.1.3 分类问题 中的过拟合
- 同理:
7.1.4 过拟合的解决办法
-
问题描述Problem Setup:
-
在前面只有1~2个特征变量的时候,我们可以通过画图来发现问题。比如这个图形非常扭曲,我们能发现它有过拟合的问题。但事实上,特征变量的个数往往非常多,当个数变多的时候,画图来发现问题来决定特征变量的去留就变得很难了。
-
如果我们有太多的特征变量,太少的数据集,那么就很容易出现过拟合的问题。
-
-
解决方法:
-
减少选取变量的数量
- 可以手动选择哪些特征变量保留,哪些舍弃。
- 可以通过模型选择算法来决定保留or舍弃哪些特征变量(之后会讲)
-
正则化
- 我们保留所有的特征变量,但是减少量级或者参数的大小。
- 当特征变量很多的时候效果很好,而且保留了每一个特征变量对预测值的影响,更合理。
7.2 代价函数
7.2.1 例子 —— 特征量少
- 图:
-
信息点:
- 左右两图分别表示 “Just right” 和 “over-fitting” 的情况。
- 过拟合就是因为存在高阶项,使得拟合曲线过于弯曲。所以,我们想“惩罚”一下 —— 让 $\theta_3 $ 和 变小。
- 于是,假设我们在代价函数后面增加这样两个项话,因为代价函数本身的目的是不断减小,但前面的1000太大了,所以只能减小 让 $\theta_3 $ 和 的值,最终 $\theta_3 $ 和 都趋于 0 。呈现的效果就像没有这两项一样,曲线也变得很光滑。但实际上这两项是保留了的,只是权重变小了。兼顾了科学性和实用性。
- 过这样的代价函数选择出的和 对预测结果的影响就比之前要小许多。
-
这就是正则化的思想:
我们合理地减小参数 的值,能得到一个更简单的假设模型,曲线更加光滑,更易减少过拟合的问题。
7.2.2 普遍情况 —— 多特征
-
当我们的特征变量和参数变得更多的时候,如下。我们并不知道哪些特征变量是高阶的,即:我们不知道哪些参数需要被缩减(shrank)。这个时候该怎办呢?
既然没有明显的目标,那么我们决定缩小所有的参数值。
-
即:假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。
这样的结果是得到了一个较为简单的能防止过拟合问题的假设:
其中$\lambda $又称为正则化参数(Regularization Parameter)。
注:根据惯例,我们不对 进行惩罚。
7.2.3 对正则化参数 的理解
-
两个目标(这两个目标是对立的关系):
- 想尽可能地去拟合样本数据,误差更小,但容易导致过拟合,后期不易预测。
- 想减少参数 的值,误差相对大一些,但能实现正则化,减轻过拟合现象。
-
的选择 其实就是在这两个目标之间寻找一种平衡。
-
若 非常非常大(大的不合理):
- 则会把所有的参数都最小化了,$\theta $(不包括${\theta_{0}}$)都会趋近于0,这样我们所得到的只能是一条平行于$x$轴的直线。 导致模型变成 ${h_\theta}\left( x \right)={\theta_{0}}$,**造成欠拟合。**
- 那为什么增加的一项$\lambda =\sum\limits_{j=1}^{n}{\theta_j^{2}}$ 可以使$\theta $的值减小呢? 因为如果我们令 $\lambda$ 的值很大的话,为了使**Cost Function** 尽可能的小,所有的 $\theta $ 的值(不包括${\theta_{0}}$)都会在一定程度上减小。
- 所以对于正则化,我们要取一个合理的 的值,这样才能更好的应用正则化。
7.3 线性回归的正则化
-
对于线性回归的求解,我们之前推导了两种学习算法:一种基于梯度下降,一种基于正规方程。我们在本节将把这两种算法推广到正则化线性回归中去。
-
正则化线性回归的代价函数为:
如果我们要使用梯度下降法令这个代价函数最小化,因为我们未对进行正则化,所以梯度下降算法将分两种情形:
{
}
对上面的算法中$ j=1,2,…,n$ 时的更新式子进行调整可得:
可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令$\theta $值减少了一个额外的值。
- 我们同样也可以利用正规方程来求解正则化线性回归模型,方法如下所示:
图中的矩阵尺寸为 。
7.4 逻辑回归的正则化
- 针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数,接下来学习了更高级的优化算法,这些高级优化算法需要你自己设计代价函数。
自己计算导数同样对于逻辑回归,我们也给代价函数增加一个正则化的表达式,得到代价函数:
Python代码:
import numpy as np
def costReg(theta, X, y, learningRate):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multiply(-y, np.log(sigmoid(X*theta.T)))
second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T)))
reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:theta.shape[1]],2))
return np.sum(first - second) / (len(X)) + reg
要最小化该代价函数,通过求导,得出梯度下降算法为:
{
}
注:看上去同线性回归一样,但是知道 ,所以与线性回归不同。 Octave 中,我们依旧可以用 fminuc
函数来求解代价函数最小化的参数,值得注意的是参数的更新规则与其他情况不同。 注意:
- 虽然正则化的逻辑回归中的梯度下降和正则化的线性回归中的表达式看起来一样,但由于两者的不同所以还是有很大差别。
- 不参与其中的任何一个正则化。
-
目前大家对机器学习算法可能还只是略懂,但是一旦你精通了线性回归、高级优化算法和正则化技术,坦率地说,你对机器学习的理解可能已经比许多工程师深入了。现在,你已经有了丰富的机器学习知识,目测比那些硅谷工程师还厉害,或者用机器学习算法来做产品。
-
接下来的课程中,我们将学习一个非常强大的非线性分类器,无论是线性回归问题,还是逻辑回归问题,都可以构造多项式来解决。你将逐渐发现还有更强大的非线性分类器,可以用来解决多项式回归问题。我们接下来将将学会,比现在解决问题的方法强大N倍的学习算法。