本文为机器学习的学习总结,讲解回归模型的正则化。
过拟合问题
我们用房屋价格预测的例子来说明过拟合问题。房屋价格的训练集为:
-
第一个图中,随着 Size 的增长,房屋价格会逐渐平稳,线性函数不是一个好的拟合结果,这种情况称为“欠拟合”,也称算法具有高偏差。
-
第二个图中使用二次函数进行拟合,拟合结果较好。
-
第三个图中选择了用高阶多项式进行拟合,曲线可以完美地经过训练集中的每一个样本点,但是曲线十分扭曲,这也不是一个好的拟合结果,我们将这种情况称为“过拟合”,或称为这个算法具有高方差。
过拟合问题通常出现在变量过多的情况下,代价函数十分接近或等于 0,曲线十分努力的拟合样本,导致它无法泛化到新的样本中,无法预测新样本的价格。
同样,逻辑回归中的过拟合问题如下;
当我们讲到调试和诊断导致学习算法出错的问题时,会讲解如何用专门工具识别过拟合和欠拟合问题。现在我们讨论当过拟合问题发生时该如何解决。在前面讲回归模型时,我们可以通过绘制假设模型函数的图像选择合适的多项式阶数。但在实际情况中,我们可能有很多的特征变量,很难画出多维的图像。当我们有过多的特征变量和但数据过少时,就会产生过拟合问题。
为了解决过拟合问题,我们有下面两个方法:
- 尽量减少特征变量的数量。手动检查,删去不重要的特征。在后面的文章中,我们会讲到模型选择算法,可自动对特征变量进行筛选。但其会舍弃一部分特征变量,丢失一些相关的信息。
- 正则化。保留所有的特征变量,但是较少量级或参数 θ j \theta_j θj 的大小
代价函数
对于房屋预测模型,我们有两个拟合函数:
我们在代价函数中加入惩罚项,使得 θ 3 , θ 4 \theta_3,\theta_4 θ3,θ4 很小。例如在代价函数中加入 + 1000 θ 3 2 + + 1000 θ 4 2 +1000\theta_3^2++1000\theta_4^2 +1000θ32++1000θ42,其中 1000 只是随便选的一个很大的数字。因为 1000 很大,我们要最小化代价函数,就要使得 θ 3 , θ 4 \theta_3,\theta_4 θ3,θ4 很小,即惩罚部分的值为 0。这样,上面过拟合的曲线就会变成二次函数,能够很好的拟合曲线。
正则化的思想就是加入惩罚,增大参数带来的效果。如果我们选择的参数较小,意味着更简单的模型,如果将所有的参数都加入到代价函数中,则可以尽量地简化模型,也更不容易出现过拟合问题。因此代价函数为:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
[
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
i
=
1
n
θ
j
2
]
J(\theta)=\frac{1}{2m}\sum_{i=1}^m[(h_θ(x^{(i)})-y^{(i)})^2+\lambda\sum\limits_{i=1}^n\theta_j^2]
J(θ)=2m1i=1∑m[(hθ(x(i))−y(i))2+λi=1∑nθj2]
无需对
θ
0
\theta_0
θ0 进行惩罚。
- 代价函数第一部分为目标函数,为了更好地拟合数据
- 第二部分 λ ∑ i = 1 n θ j 2 \lambda\sum\limits_{i=1}^n\theta_j^2 λi=1∑nθj2 被称为正则项,为了保持参数尽量小
- λ \lambda λ 被称为正则化参数,控制两个目标间的平衡关系。如果 λ \lambda λ 选择过大,即对参数惩罚过重,则参数均约等于 0,此时 h θ ( x ) = θ 0 h_\theta(x)=\theta_0 hθ(x)=θ0,相当于用直线进行拟合,是欠拟合的。因此我们需要选择一个合适的 λ \lambda λ。
在后面的文章中,我们在多重选择时会讲到很多方法自动选择正则化参数 λ \lambda λ。
线性回归的正则化
我们将正则化应用到线性回归中的梯度下降法和正规方程。
梯度下降法
原来梯度下降法更新式为:
θ
j
:
=
θ
j
−
α
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_j:=\theta_j-\alpha\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
θj:=θj−αi=1∑m(hθ(x(i))−y(i))xj(i)
因为我们的惩罚对象中没有
θ
0
\theta_0
θ0,单独写出
j
=
0
j=0
j=0 项:
θ
0
:
=
θ
0
−
α
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
\theta_0:=\theta_0-\alpha\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)}
θ0:=θ0−αi=1∑m(hθ(x(i))−y(i))x0(i)
在剩余项中加入惩罚项,求导后得到:
θ
j
:
=
θ
j
−
α
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
+
λ
m
θ
j
(
j
=
1
,
2
,
…
,
n
)
\theta_j:=\theta_j-\alpha\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}\theta_j \qquad (j=1,2,…,n)
θj:=θj−αi=1∑m(hθ(x(i))−y(i))xj(i)+mλθj(j=1,2,…,n)
合并
θ
j
\theta_j
θj 后有:
θ
j
:
=
θ
j
(
1
−
α
λ
m
)
−
α
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_j:=\theta_j(1-\alpha\frac{\lambda}{m})-\alpha\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
θj:=θj(1−αmλ)−αi=1∑m(hθ(x(i))−y(i))xj(i)
其中
1
−
α
λ
m
1-\alpha\frac{\lambda}{m}
1−αmλ 是一个略小于 1 的数字,因为通常学习率
α
\alpha
α 很小而样本数量
m
m
m 很大,可将其看作 0.99。上式的意义为,将
θ
j
\theta_j
θj (的平方范数)缩小了一点,其余部分与线性回归中相同。
正规方程法
线性回归模型的正规方程法见【线性回归模型】。其推导为:通过令
∂
∂
θ
j
J
(
θ
)
=
0
\frac{\partial}{\partial\theta_j}J(θ)=0
∂θj∂J(θ)=0,然后进行一些数学推导得到解。这里我们在
J
(
θ
)
J(\theta)
J(θ) 中加入惩罚项,推导后得到结果:
θ
=
(
X
T
X
+
λ
[
0
0
⋯
0
0
1
0
⋮
⋮
0
⋱
⋮
0
⋯
⋯
1
]
)
−
1
X
T
y
\theta=(X^TX+\lambda\left[ \begin{matrix} 0 & 0 & \cdots & 0\\ 0 & 1 & 0 & \vdots \\ \vdots & 0 & \ddots & \vdots \\ 0 & \cdots & \cdots & 1 \end{matrix} \right])^{-1}X^Ty
θ=(XTX+λ⎣⎢⎢⎢⎢⎡00⋮0010⋯⋯0⋱⋯0⋮⋮1⎦⎥⎥⎥⎥⎤)−1XTy
中间的矩阵是
n
+
1
n+1
n+1 维的方阵,除了左上角为 0,对角线上其它元素都为 1。
不可逆问题(可选)
这部分内容对后面学习的衔接没有直接的影响,不感兴趣可以跳过。
我们在【线性回归模型】中讨论过正规方程的不可逆问题,即
X
T
X
X^TX
XTX 不可逆的问题,虽然 piv()
能求出一个解,但其并不是最优解。而在正规方程中加入正则化,我们可以证明:当
λ
>
0
\lambda>0
λ>0 时,
X
T
X
+
λ
M
a
t
r
i
x
X^TX+\lambda Matrix
XTX+λMatrix 一定可逆。因此正则化还可以解决不可逆的问题。
逻辑回归的正则化
我们在逻辑回归的代价函数中添加惩罚项:
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
(
y
(
i
)
log
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
J(\theta)=-\frac{1}{m}[\sum\limits_{i=1}^m(y^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))]+\frac{\lambda}{2m}\sum\limits_{j=1}^n\theta_j^2
J(θ)=−m1[i=1∑m(y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
在梯度下降算法中,类似线性回归中的梯度下降,只是
h
θ
(
x
)
h_\theta(x)
hθ(x) 的形式不同。求导后得到:
θ
j
:
=
θ
j
−
α
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
+
λ
m
θ
j
(
j
=
1
,
2
,
…
,
n
)
\theta_j:=\theta_j-\alpha\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}\theta_j \qquad (j=1,2,…,n)
θj:=θj−αi=1∑m(hθ(x(i))−y(i))xj(i)+mλθj(j=1,2,…,n)
在高级优化算法中使用正则化,只需要在计算代价函数和梯度时加入惩罚项。