文章目录
第5章:正则化
5.1 过拟合问题 The problem of overfitting
什么是过拟合问题?
我们继续用线性回归来预测房价的例子,我们通过建立以住房面积为自变量的函数来预测房价。我们可以用一次函数来拟合数据,但这不是一个很好的模型,通过数据可以明显看出,随着房子面积增大,住房价格应该逐渐稳定,该模型没有很好的拟合训练集,称为欠拟合或高偏差;如果我们用二次函数来拟合数据,拟合效果很好;如果我们用四阶多项式来拟合数据,虽然我们完美地拟合了训练集但在测试集的表现效果很差,称为过拟合或高方差。
概括地说,如果我们有太多的特征变量,训练出的假设函数能很好地拟合训练集,即代价函数非常接近于0,但是无法泛化到新的样本中,称之为过拟合问题。
同样,逻辑回归也存在过拟合问题。
怎样解决过拟合问题?
有两个方法解决过拟合问题:
- 减少选取特征变量的数量
①人工检查变量清单,并以此决定哪些变量应该保留
②模型选择算法,这种算法可以自动选择哪些变量保留 - 正则化
①保留所有的特征变量,但是减少量级或者参数 θ j \theta_j θj的大小
②当有很多特征变量时,这个方法非常有效,其中的每一个变量都能对预测的y值产生一点影响
5.2 代价函数 Cost function
正则化的思想就是给参数惩罚,使参数的值很小,这样就会得到更简单的假设函数,也就更不容易出现过拟合的问题。
如图所示,给
θ
3
\theta_3
θ3和
θ
4
\theta_4
θ4前面各加一个很大的系数,那么优化的时候为了得到更小的值,那只能让
θ
3
\theta_3
θ3和
θ
4
\theta_4
θ4更小,尽量接近于0。
但是,当有很多特征变量时,我们很难预先挑选出哪些变量是相关度较低的,于是我们就不知道该选出哪些参数来缩小他们的值,所以我们要在代价函数中加入正则化项作为惩罚项来缩小每一个参数的值。
加入正则化项的代价函数
J
(
θ
)
J(\theta)
J(θ)为:
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
n
θ
j
2
]
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(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2]
min
θ
J
(
θ
)
\min_\theta J(\theta)
θminJ(θ)其中
λ
\lambda
λ是正则化参数,它的作用就是控制两个不同目标之间的取舍,第一个目标也就是目标函数的第一项,为了更好地拟合数据;第二个目标也就是正则化项,为了保持参数尽量地小,从而避免出现过拟合的情况。
如果
λ
\lambda
λ设置的过大,对参数的惩罚过多的时候,那就会使每个参数都接近于0,这样便会出现欠拟合的情况。
5.3 线性回归的正则化 Regularized linear regression
线性回归正则化后的代价函数为:
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
n
θ
j
2
]
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(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2]
min
θ
J
(
θ
)
\min_\theta J(\theta)
θminJ(θ)
5.3.1 基于梯度下降的线性回归正则化
Repeat {
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
\theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)}
θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))x0(i)
θ
j
:
=
θ
j
−
α
[
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
+
λ
m
θ
j
]
\theta_j:=\theta_j-\alpha[\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}\theta_j]
θj:=θj−α[m1i=1∑m(hθ(x(i))−y(i))xj(i)+mλθj]
(
j
=
1
,
2
,
3
,
⋯
,
n
)
\qquad(j=1,2,3,\cdots,n)
(j=1,2,3,⋯,n)}
对
θ
j
\theta_j
θj变形得到:
θ
j
:
=
θ
j
(
1
−
α
λ
m
)
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_j:=\theta_j(1-\alpha\frac{\lambda}{m})-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
θj:=θj(1−αmλ)−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
对于线性回归的正则化,我们惩罚的对象是
θ
1
,
θ
2
,
⋯
,
θ
n
\theta_1,\theta_2,\cdots,\theta_n
θ1,θ2,⋯,θn,不惩罚
θ
0
\theta_0
θ0,所以把对
θ
0
\theta_0
θ0的更新单独写出来。
由上面的式子可见,正则化之后的梯度下降更新与之前的梯度下降更新相比,
θ
j
\theta_j
θj多乘了一个
(
1
−
α
λ
m
)
(1-\alpha\frac{\lambda}{m})
(1−αmλ)。因为
α
\alpha
α很小而m很大,所以
(
1
−
α
λ
m
)
(1-\alpha\frac{\lambda}{m})
(1−αmλ)是一个比1略小的值,相当于每次迭代的时候把参数缩小了一点点,或者说
θ
j
\theta_j
θj的平方范数变小了。
5.3.1 基于正规方程的线性回归正则化
θ
=
(
X
T
X
+
λ
[
0
1
1
⋱
1
]
)
−
1
X
T
y
\theta=\left( X^TX+\lambda\begin{bmatrix} 0 \\ & 1\\ & & 1 \\ & & & \ddots \\ & & & & 1 \end{bmatrix}\right) ^{-1}X^Ty
θ=⎝⎜⎜⎜⎜⎛XTX+λ⎣⎢⎢⎢⎢⎡011⋱1⎦⎥⎥⎥⎥⎤⎠⎟⎟⎟⎟⎞−1XTy
之前我们知道当样本数m小于等于特征数n时,
X
T
X
X^TX
XTX是不可逆的,但是我们加了正则化项之后就永远可逆。正则化项可以解决不可逆问题。
5.4 Logistic回归的正则化 Regularized logistic regression
逻辑回归正则化后的代价函数为: J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta) = -\frac{1}{m}[\sum_{i=1}^my^{(i)}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]+\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2 J(θ)=−m1[i=1∑my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2 min θ J ( θ ) \min_\theta J(\theta) θminJ(θ)
5.4.1 基于梯度下降的逻辑回归正则化
Repeat {
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
\theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)}
θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))x0(i)
θ
j
:
=
θ
j
−
α
[
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
+
λ
m
θ
j
]
\theta_j:=\theta_j-\alpha[\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}\theta_j]
θj:=θj−α[m1i=1∑m(hθ(x(i))−y(i))xj(i)+mλθj]
(
j
=
1
,
2
,
3
,
⋯
,
n
)
\qquad(j=1,2,3,\cdots,n)
(j=1,2,3,⋯,n)}
注意,虽然逻辑回归正则化的梯度下降与线性回归正则化的梯度下降形式上一样,但是内容不一样,这里的
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}
hθ(x)=1+e−θTx1。
5.4.2 基于高级优化算法的逻辑回归正则化
高级的优化算法需要我们自己写costFunction函数,costFunction函数有两个返回值jVal和gradient,jVal是用来计算
J
(
θ
)
J(\theta)
J(θ),gradient是用来计算对
J
(
θ
)
J(\theta)
J(θ)的偏导数,那我们在写的时候就要加上正则化项,如下图所示。