1. 什么是过拟合?
(1)过拟合介绍
首先给出一个关于线性回归的例子:
已知某房子面积与房价的训练集数据,通过下图给出:
①将假设函数设为
h
θ
(
x
)
=
θ
0
+
θ
1
x
h_{\theta}(x)=\theta_0+\theta_1x
hθ(x)=θ0+θ1x
则训练集与假设函数的曲线拟合情况如下:
此时的训练集数据与曲线的拟合情况非常差,这种情况下我们称为欠拟合(Unfitting)或高偏差(High bias)。
②将假设函数设为
h
θ
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
h_{\theta}(x)=\theta_0+\theta_1x+\theta_2x^2
hθ(x)=θ0+θ1x+θ2x2
得到的训练集数据与曲线拟合情况如下:
此时训练集数据与假设函数曲线的拟合情况非常好,可以说是用到了非常合适的假设函数。
③将假设函数设为
h
θ
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
3
+
θ
4
x
4
h_{\theta}(x)=\theta_0+\theta_1x+\theta_2x^3+\theta_4x^4
hθ(x)=θ0+θ1x+θ2x3+θ4x4
得到的训练集数据与曲线拟合情况:
此时虽然拟合情况看上去不错,假设函数的曲线分别对应上了各训练集数据点,但是曲线的构成非常复杂,其中的参数过多,实际上并不是一个好的拟合曲线,这种情况便称之为过拟合(Overfitting)或高方差(High variance)。
过拟合的定义: 当我们有较多的特征,且假设函数能够拟合的非常完美( J ( x ) ≈ 0 J(x)\approx0 J(x)≈0),但这个假设函数无法对新的数据进行泛化时(即无法对某一个新的数据预测出较为准确的结果),我们称这种情况为过拟合。
(可以认为,过拟合就是拟合曲线能够完美的拟合现有数据点,但若加入新数据点则仍旧无法拟合)
再给出一个关于逻辑回归中过拟合的例子:
已给出的数据点:
①假设函数设为:
h
θ
(
x
)
=
g
(
θ
0
+
θ
1
x
1
+
θ
2
x
2
)
h_{\theta}(x)=g(\theta_0+\theta_1x_1+\theta_2x_2)
hθ(x)=g(θ0+θ1x1+θ2x2)
此时称之为欠拟合(Unfitting)或高偏差(High bias)。
②假设函数设为:
h
θ
(
x
)
=
g
(
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
1
2
+
θ
4
x
2
2
+
θ
5
x
1
x
2
)
h_{\theta}(x)=g(\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1^2+\theta_4x_2^2+\theta_5x_1x_2)
hθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22+θ5x1x2)
此时拟合情况良好。
③假设函数设为:
h
θ
(
x
)
=
g
(
θ
0
+
θ
1
x
1
+
θ
2
x
2
2
+
θ
3
x
1
2
x
2
+
θ
4
x
1
2
x
2
2
+
θ
5
x
1
2
x
2
3
.
.
.
)
h_{\theta}(x)=g(\theta_0+\theta_1x_1+\theta_2x_2^2+\theta_3x_1^2x_2+\theta_4x_1^2x_2^2+\theta_5x_1^2x_2^3...)
hθ(x)=g(θ0+θ1x1+θ2x22+θ3x12x2+θ4x12x22+θ5x12x23...)
此时的情况称之为过拟合(Overfitting)或高方差(High variance)。
(2)解决过拟合可用的方法
首先,会发生过拟合的情况:当特征过多,训练集数据又较少时,较容易发生过拟合情况。
解决过拟合的方法有以下:
① 降低特征数量
——人为地选择保留哪些特征
——模型选择算法(可自动确定哪些特征被留下,哪些特征被舍去)
② 进行正则化
——保留所有的特征,但减少量级或参数θ的大小(对于有很多特征,且每个特征对于预测结果都有一定贡献的情况非常有用)
2. 正则化
(1)正则化介绍
首先给出个房子大小与房价之间关系的训练集例子:
如果令假设函数为
h
θ
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
h_{\theta}(x)=\theta_0+\theta_1x+\theta_2x^2
hθ(x)=θ0+θ1x+θ2x2,那么我们可以看到曲线拟合情况:
此时给出的假设函数与训练集数据的拟合情况是非常合适的,也是我们所需要的。
但是如果我们的假设函数为
h
θ
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
3
+
θ
4
x
4
h_{\theta}(x)=\theta_0+\theta_1x+\theta_2x^3+\theta_4x^4
hθ(x)=θ0+θ1x+θ2x3+θ4x4,这种情况下给出的拟合情况为过拟合:
如果给出的假设函数导致了过拟合情况,我们该如何使用正则化将过拟合消除掉呢?
方法是将过拟合的假设函数所对应代价函数改进一下:
m
i
n
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
1000
∗
θ
3
2
+
1000
∗
θ
4
2
min\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2+1000*\theta_3^2+1000*\theta_4^2
min2m1i=1∑m(hθ(x(i))−y(i))2+1000∗θ32+1000∗θ42
上面的公式中对比原先的代价函数,增加了
1000
∗
θ
3
2
+
1000
∗
θ
4
2
1000*\theta_3^2+1000*\theta_4^2
1000∗θ32+1000∗θ42项,这项中
θ
3
\theta_3
θ3与
θ
4
\theta_4
θ4的系数值都较高,目的是增加了
θ
3
\theta_3
θ3和
θ
4
\theta_4
θ4在代价函数计算中的比重,最终会导致
θ
3
\theta_3
θ3与
θ
4
\theta_4
θ4值变得非常小,因此假设函数中
θ
3
\theta_3
θ3与
θ
4
\theta_4
θ4的比重就较小(接近于0),得出的曲线更贴近
h
θ
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
h_{\theta}(x)=\theta_0+\theta_1x+\theta_2x^2
hθ(x)=θ0+θ1x+θ2x2。
正则化方法的思想:减小 θ 1 , θ 2 , . . . , θ n \theta_1,\theta_2,...,\theta_n θ1,θ2,...,θn,从而得到一个更小的参数值,更小的参数值会令假设函数更加得简单、平滑,也就更不容易出现过拟合的问题。
在上面的例子中,我们知道应该缩小
θ
3
\theta_3
θ3与
θ
4
\theta_4
θ4的值,但是在参数非常多的情况下,我们很难知道哪些特征与结果是强相关的,哪些特征与结果是弱相关的,因此我们无法挑选出一些参数进行减小,因此我们使用的方法是将所有的参数值都进行适当比例的缩小,将代价函数写成如下的样子:
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
i
=
1
m
θ
j
2
]
J(\theta)=\frac{1}{2m}[ \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2+\lambda \sum_{i=1}^{m}\theta_j^2]
J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λi=1∑mθj2]
通常θ0不加入公式的第二项中;公式中的λ是用来控制方括号中两项的平衡关系(即“更好地去拟合训练集的目标(第一项)”与“将参数控制得更小的目标(第二项)”二者),经过正则化后得到的假设函数会更加的平滑、简单。
但是需要注意的一点是,如果λ的取值过大(如λ为1010),那么所有的参数θ都将无限的接近于0,此时假设函数 h θ ( x ) = θ 0 h_\theta(x)=\theta_0 hθ(x)=θ0,假设函数变成了一条直线,显然也是不符合拟合情况的。因此,选取λ的取值也是需要注意的问题。
(2)正则化线性回归
正则化可应用在线性回归问题中,线性回归中对于参数θ的计算方法在之前的章节中讲过,目前学会的有两种:
①梯度下降算法(通过计算代价函数及其偏导值求出θ)
②使用正规方程计算θ
①梯度下降算法
首先给出代价函数的公式:
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
i
=
1
m
θ
j
2
]
J(\theta)=\frac{1}{2m}[ \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2+\lambda \sum_{i=1}^{m}\theta_j^2]
J(θ)=2m1[i=1∑m(hθ(x(i))−y(i))2+λi=1∑mθj2]
梯度下降算法的算法公式:
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
]
(
j
=
1
,
2
,
.
.
,
n
)
\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=1,2,..,n)
θj:=θj−α[m1i=1∑m(hθ(x(i))−y(i))xj(i)+mλθj](j=1,2,..,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)
②正规方程
原本根据正规方程计算θ的公式如下:
θ
=
(
X
T
X
)
−
1
X
T
y
\theta=(X^TX)^{-1}X^Ty
θ=(XTX)−1XTy
在对线性回归使用正则化后,我们得到的正规方程公式如下:
θ
=
(
X
T
X
+
λ
[
0
1
1
.
.
.
1
]
)
−
1
X
T
y
\theta=(X^TX+\lambda \left[ \begin{matrix} 0 & & & & \\ & 1 & & &\\ & & 1 & &\\ & & &... &\\ & & & &1\\ \end{matrix} \right])^{-1}X^Ty
θ=(XTX+λ⎣⎢⎢⎢⎢⎡011...1⎦⎥⎥⎥⎥⎤)−1XTy
(3)正则化逻辑回归
处理逻辑回归时我们主要使用的方法是使用梯度下降算法计算出合适的θ值,首先我们给出逻辑回归中的代价函数公式:
J
(
θ
)
=
−
[
1
m
∑
i
=
1
m
y
(
i
)
l
o
g
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
J(\theta)=-[\frac{1}{m}\sum_{i=1}^{m}y^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]
J(θ)=−[m1i=1∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
梯度下降算法:
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
]
(
j
=
1
,
2
,
.
.
,
n
)
\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=1,2,..,n)
θj:=θj−α[m1i=1∑m(hθ(x(i))−y(i))xj(i)+mλθj](j=1,2,..,n)
}
注意:虽然正则化逻辑回归中的梯度下降算法公式与正则化线性回归中的梯度下降算法很类似,但是实际上不同,因为它们的假设函数hθ(x)是不同的。