「吴恩达机器学习」8.正则化
前面我们已经讲解了线性回归和逻辑回归算法,但是当我们将这些算法应用到实际问题中时,有可能会出现过拟合问题(overfitting problem),导致效果很差,我们可以通过正则化来处理过拟合问题。
The Problem of Overfitting
主要介绍了什么是过拟合。
Example
以我们之前讲解过的房价预测线性回归问题为例,我们可能分别采用了下面3个模型:
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1gf25lmnhayj31xe0nqtef.jpg)
第一个模型是一个线性模型,即使是在训练集中都不能很好地拟合我们的数据,称为欠拟合(underfitting),也称为高偏差(high bias);第三个模型是一个4次方的模型,过于强调拟合原始数据,但却无法拟合未出现在训练集中的数据,称为过拟合(overfitting),也称为高方差(high variance);而中间的模型似乎是最合适的。
同理,分类问题也存在这样的问题:
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1gf25ra4yiuj31p00u0tm5.jpg)
过拟合:如果我们有太多的特征值,假设函数可能会对训练集拟合的非常好,但无法泛化到新的数据。
Overfitting: If we have too many features, the learned hypothesis may fit the training set very well, but fail to generalize to new examples (predict prices on new examples).
Addressing overfitting
如何处理过拟合问题?
Options:
-
Reduce number of features.
-
Manually select which features to keep.
-
Model selection algorithm (later in course).
通过手动或者模型选择算法来减少特征值数量,但是这种方法有可能会丢失一些有用的信息。
-
-
Regularization.
-
Keep all the features, but reduce magnitude/values of parameters \(\theta_j\).
-
Works well when we have a lot of features, each of which contributes a bit to predicting \(y\).
采用正则化,保留所有特征,但减小参数的大小。
-
Cost Function
讲解了加入正则化之后的代价函数。
从之前的例子直观感受一下:
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1gf26vtf53cj31ha0j8q6i.jpg)
如果我们的代价函数为:\(\frac{1}{2m}\sum{(h_\theta(x^{(i)})-y^{(i)})^2}\),那么在4次方的模型中得到的结果可能是右图的蓝色曲线。
但是,如果我们修改代价函数为:\(\frac{1}{2m}[\sum{(h_\theta(x^{(i)})-y^{(i)})^2} + 1000\theta_3^2 + 1000\theta_4^2]\),那么在训练的过程中,为了使得cost足够的小,最终得出的\(\theta_3\)和\(\theta_4\)就会非常小,接近于0,这样我们得到的模型就是右图中的红色曲线,接近于2次方模型得出的结果。
这里的1000只是随便选取的一个较大的值,为的是惩罚参数\(\theta_3\)和\(\theta_4\)。
这就是正则化的思想:选取值更小的参数\(\theta\)
- “简化”假设函数;
- 更不容易过拟合
这样我们就得出总结出了一个防止过拟合的代价函数:
注:按照惯例,这里不对\(\theta_0\)进行惩罚(penalize),虽然在实操中对\(\theta_0\)进行惩罚与否对结果并没有影响。
其中\(\lambda\)称为正则化参数(Regularization Parameter)。
加入正则化的代价函数被分为两个部分,前半部分\(\sum{(h_\theta(x^{(i)})-y^{(i)})^2}\)可以认为是为了求解代价最小对应的参数\(\theta\),而后半部分\(\lambda \sum_{j=1}^n{\theta_j^2}\)可以认为是为了使得每个参数\(\theta_j \space (j=1 \cdots n)\)都尽量小。
如果\(\lambda\)被设置成太大,那么会发生什么?
我们从直观上理解,假如\(\lambda\)太大,就会对所有\(\theta_j\)惩罚成非常小的值,约等于0,这样我们最终得到的假设函数\(J(\theta) \approx \theta_0\),也就是一条水平的直线,这样的模型几乎没办法拟合任何数据,发生了欠拟合问题。
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1gf27h71amoj31300kydi8.jpg)
所以对于正则化,我们需要选取一个合理的\(\lambda\)值,才能更好的应用正则化。
Regularized Linear Regression
分别讲解了如何把正则化应用到线性回归的两种方法上,梯度下降和正规方程。
由于加入正则化的线性回归代价函数已经发生了变化:\(J(\theta) = \frac{1}{2m}[\sum_{i=1}^m{(h_\theta(x^{(i)})-y^{(i)})^2} + \lambda \sum_{j=1}^n{\theta_j^2}]\),因此最小化\(J(\theta)\)的过程也理应发生变化。
Gradient descent
由于我们不对参数\(\theta_0\)进行正则化,所以梯度下降算法分成两种情形:
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1gf28d72ge6j31bu0lhq7v.jpg)
对上面算法中第二个式子调整为:
可以直观地看出,后面部分就是没经过正则化的梯度下降,而前面部分的\((1- \alpha \frac{\lambda}{m})\)通常小于1,相当于\(\theta_j\)每次迭代都在之前的基础上进行减小。
Normal equation
特征矩阵\(X\)是一个\(m \times (n+1)\)维的矩阵\(X= \begin{bmatrix} (x^{(1)})^T \\ \vdots\\ (x^{(m)})^T \end{bmatrix}\),而标签向量\(y\)是一个\(m\)维向量\(y=\begin{bmatrix} y^{(1)} \\ \vdots\\ y^{(m)} \end{bmatrix}\).
参数\(\theta\)的正规方程:
Non-invertibility (optional/advanced)
之前讲解正规方程时我们就讨论过了矩阵的不可逆问题,而经过正规化的代价函数,还有一个额外的好处,就是正规方程中,\(\left( X^TX + \lambda \begin{bmatrix}0 & \\& 1 \\& & 1 \\& & & \ddots \\& & & & 1\end{bmatrix}\right)\)项是绝对可逆的,不存在不可逆的问题。
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1gf2doh424bj31hg0tmadw.jpg)
Regularized Logistic Regression
![](https://img2020.cnblogs.com/blog/1427049/202112/1427049-20211229100547559-1651285121.png)
我们同样给逻辑回归的代价函数增加一个正则化的表达式,得到新的代价函数:
代价函数Python代码(先不看)
要最小化该代价函数,同样需要求导,得出梯度下降算法为:
![](https://tva1.sinaimg.cn/large/007S8ZIlgy1gf2eddl5hhj318c0obwjh.jpg)
注意:
- 虽然正则化的逻辑回归中的梯度下降算法和正则化的线性回归中的表达式看起来似乎一样,但是由于\(h_\theta(x)\)的不同,所以两者有很大差别。
- \(\theta_0\)不参与正则化。