所有的机器学习需要的能力都不是针对标签已知的样本进行判别决策的能力,而是正对未知样本能够正确预测的能力,但是在我们的模型学习过程中,会出现一些过犹不及的现象。
什么是过度拟合
过度拟合(overfitting), 实际上是为了尽可能的减小训练集的误差,从而导致模型过度复杂,泛化能力下降的情况。所谓泛化能力,指的就是对未知样本的预测能力。
如图所示,在预测面积和房价的案例中。如果我们使用线性图一,过于简单的模型,会使得样本偏离变大,这个叫做欠拟合。而使用第三个曲线,虽然训练样本的方差很小,但是其的泛化能力反而不如图二,原因是引入的方差过大,这就是过度拟合。我们希望选择图二这种平滑而有效的模型
为什么会过度拟合
- 因为特征变量过多,而数据量不足。
- 对影响小的特征变量没有坐有效的限制,使得拟合的模型诡谲多变。
如果解决过度拟合问题
- 减少特征值
可以手动人为的根据经验的减少特质值
也可以在模型中自动的减少特征值 - 正则化代价函数
选择尽可能小的参数,这样一般有两个好处:
- 使得模型更加简单
- 减小过度拟合的可能性
在线性拟合和逻辑拟合的代价函数是:
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
)
]
J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}(h_\theta( x^{(i)}-y^{(i)}))]
J(θ)=2m1[i=1∑m(hθ(x(i)−y(i)))]
在这个过程中,为了获得尽可能小的参数我们在代价函数中加入如下的项:
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
)
+
λ
∑
j
=
1
m
θ
j
2
]
J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}(h_\theta( x^{(i)}-y^{(i)}))+\lambda \sum_{j=1}^{m}\theta_j^2]
J(θ)=2m1[i=1∑m(hθ(x(i)−y(i)))+λj=1∑mθj2]
我们通过选择合适的
θ
\theta
θ 值来优化上面的代价函数。
值得注意得是,
λ
\lambda
λ相当于对
θ
\theta
θ大小的代价因子,不宜选择过大。否则我们会趋于将所有的
θ
\theta
θ都取为0,这个时候我们的模型就接近一个常数模型了(除了第一个参数以外,所有的参数都为0的情况)
正则化问题求解
我们对回归正则化以后,
J
(
θ
)
=
1
2
m
[
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
)
+
λ
∑
j
=
1
m
θ
j
2
]
J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}(h_\theta( x^{(i)}-y^{(i)}))+\lambda \sum_{j=1}^{m}\theta_j^2]
J(θ)=2m1[i=1∑m(hθ(x(i)−y(i)))+λj=1∑mθj2]
也就是说需要求解参数使得J最小
min
θ
J
(
θ
)
\min_{\theta} J(\theta)
θminJ(θ)
我们依然使用梯度下降,也就是对正则因子进行求偏导:
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
\theta_j :=\theta_j-\alpha \frac{\partial}{\partial \theta_j}J(\theta)
θj:=θj−α∂θj∂J(θ)
也就是,
θ
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θ(xi)−yi)xji+mλθj]
也就是
θ
j
:
=
(
1
−
α
λ
m
)
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
i
)
−
y
i
)
x
j
i
\theta_j :=(1-\alpha\frac{\lambda}{m})\theta_j-\alpha \frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^i)-y^i)x_j^i
θj:=(1−αmλ)θj−αm1i=1∑m(hθ(xi)−yi)xji