7.1 过拟合问题
7.1.1 什么是过拟合问题?
什么是过拟合问题?
首先,什么是过拟合问题?
引用学术上的话来说,就是:
过拟合是指为了得到一致假设而使假设变得过度严格。
用更为抽象一些的话来进行评价,如下图所示,左边,中间和右边三者分别展示了什么是欠拟合,理想的拟合状态和过拟合。
同时这里需要引入几个概念,通常来说,欠拟合带来的是高偏倚度,也叫高偏差;过拟合带来的则是高方差。
过拟合除了上述这些问题,从模型的角度来讲也不是一个好的结果。引用吴恩达的话来说就是
如果我们的拟合函数是一个高阶多项式,虽然理论上它可以模拟任何数值,但是该模型对数据的要求量也很大。这使得我们很难去约束或者求解它。
另外,从应用的角度来讲,其定义大抵如下:
尽管我们的模型千方百计地去拟合已有的数据,甚至于达到了损失函数近似为0的程度。但是其泛化效果并不好,没有应用价值。
泛化是指将假设模型应用到实际中预测新数据的能力。
用我们先前讲过的逻辑回归举例说明的话,就是下图:
7.1.2 过拟合问题的解决方法
那么,如何解决过拟合的问题呢?
大致有两种理论思想
- 减少特征数量
1.1 手动剔除
1.2 模型选择算法(model selection algorithm) - 正则化(regularization)
适用于各个特征重要性相似且较多的情况。在这种情况下,我们保留所有的特征,但是降低 θ j \theta_j θj的值。
7.2 损失(代价)函数
7.2.1 一个小例子
首先仍然对比以下过拟合与正常拟合的情况,如下图所示:
如图所示,右边的过拟合情况尽管拟合效果更好,但是可以遇见的是其泛化性能不够理想。在此例中,对比正常拟合与过拟合的两种现象我们可以看出,两者的预测函数有着本质不同。后者相较于前者多了两个高阶项,这直接导致了两个模型的预测差异。
那么如何来解决这一问题呢?
从损失函数上下功夫
仍以上面的例子进行阐述。若想将上例中过拟合的情况调整为正常拟合而又不减少模型参数,可以从损失函数上下功夫。
我们原有的,力图使其最小化的损失函数为:
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
\frac{1}{2m} \sum_{i=1}^m (h_{\theta}(x^{(i)}) - y^{(i)})^2
2m1i=1∑m(hθ(x(i))−y(i))2
现在,我们将其做一些变更:
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
1000
θ
3
2
+
1000
θ
4
2
\frac{1}{2m} \sum_{i=1}^m (h_{\theta}(x^{(i)}) - y^{(i)})^2 + 1000 \theta_3^2 + 1000\theta_4^2
2m1i=1∑m(hθ(x(i))−y(i))2+1000θ32+1000θ42
变更后的损失函数仍然遵循最小化原则。但是通过令高次项特征的系数前面带上1000这样的大数,可以将
θ
3
\theta_3
θ3和
θ
4
\theta_4
θ4化为最小,这样使得整个模型受高次项影响较小,大大降低过拟合程度。
7.2.2 推广化
但是,我们日常处理的数据对我们来说是一个”黑箱子“,只有特征
x
(
i
)
x^{(i)}
x(i)以及其对应的特征系数
θ
(
i
)
\theta^{(i)}
θ(i),根本难以判断哪个系数会是所谓的高次项。为了解决这一问题,我们采用以下修改损失函数的办法:
J
(
θ
)
=
1
2
m
(
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
)
2
+
λ
∑
j
=
1
m
θ
j
2
)
J(\theta) = \frac{1}{2m} ( \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y)^2+\lambda \sum_{j=1}^m \theta_j^2 )
J(θ)=2m1(i=1∑m(hθ(x(i))−y)2+λj=1∑mθj2)
其中
λ
\lambda
λ被称为正则化参数,它不能太大,过大的正则化参数会使得各个
θ
\theta
θ很小;它也不能过小,这样难以起到正则化效果,区分并降低高次项权重。
同时,我们只是惩罚
θ
j
(
j
=
1
,
2
,
,
,
n
)
\theta_j(j=1,2,,,n)
θj(j=1,2,,,n)而没有惩罚
θ
0
\theta_0
θ0,这是一个约定俗成的习惯。
7.3 线性回归的正则化
根据推广化的正则表达式,我们可以将梯度下降应用于线性回归中。根据上文,修改后的损失函数表达式为:
J
(
θ
)
=
1
2
m
(
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
)
2
+
λ
∑
j
=
1
m
θ
j
2
)
J(\theta) = \frac{1}{2m} ( \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y)^2+\lambda \sum_{j=1}^m \theta_j^2 )
J(θ)=2m1(i=1∑m(hθ(x(i))−y)2+λj=1∑mθj2)
对其应用梯度下降可得(注意,我们在正则化时只是惩罚
θ
1
\theta_1
θ1到
θ
j
\theta_j
θj,没有改变
θ
0
\theta_0
θ0,所以在下面进行区分)
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
)
x
0
(
i
)
\theta_0 :=\theta_0- \alpha \frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)})-y)x_0^{(i)}
θ0:=θ0−αm1i=1∑m(hθ(x(i))−y)x0(i)
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
)
x
j
(
i
)
+
λ
m
θ
j
\theta_j :=\theta_j- \alpha \frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)})-y)x_j^{(i)} + \frac{\lambda}{m} \theta_j
θj:=θj−αm1i=1∑m(hθ(x(i))−y)xj(i)+mλθj
将下式改写为:
θ
j
:
=
(
1
−
λ
m
)
θ
j
−
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
)
x
j
(
i
)
\theta_j := (1-\frac{\lambda}{m}) \theta_j- \frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)})-y)x_j^{(i)}
θj:=(1−mλ)θj−m1i=1∑m(hθ(x(i))−y)xj(i)
通常来说
1
−
λ
m
1-\frac{\lambda}{m}
1−mλ由于
λ
\lambda
λ较小,m较大,因此其该式子趋近于1,但是仍比1要小。因此相当于每次迭代,参数都会缩小一些。
7.4 Logistic回归的正则化
根据我们将线性回归的正则化过程我们可以得出,Logistic回归修改后的损失函数表达式为:
J
(
θ
)
=
−
1
m
∑
i
=
1
m
y
(
i
)
log
h
θ
(
x
(
i
)
)
+
(
1
−
y
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
+
λ
2
m
∑
j
=
1
n
θ
j
2
J(\theta) = -\frac{1}{m} \sum_{i=1}^m y^{(i)} \log h_{\theta}(x^{(i)}) +(1-y) \log (1-h_{\theta}(x^{(i)})) + \frac{\lambda}{2m} \sum_{j=1}^n \theta_j^2
J(θ)=−m1i=1∑my(i)loghθ(x(i))+(1−y)log(1−hθ(x(i)))+2mλj=1∑nθj2
和线性回归一样,修改后的损失函数旨在惩罚
θ
1
,
θ
2
.
.
.
θ
n
\theta_1,\theta_2...\theta_n
θ1,θ2...θn。
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
)
x
0
(
i
)
\theta_0 :=\theta_0- \alpha \frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)})-y)x_0^{(i)}
θ0:=θ0−αm1i=1∑m(hθ(x(i))−y)x0(i)
接下来更新各参数的过程和线性回归表达式一样,唯一的区别在于此时模型不一样,对应的
h
θ
(
x
)
也不尽相同
h_{\theta}(x)也不尽相同
hθ(x)也不尽相同
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
)
x
j
(
i
)
+
λ
m
θ
j
\theta_j :=\theta_j- \alpha \frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)})-y)x_j^{(i)} + \frac{\lambda}{m} \theta_j
θj:=θj−αm1i=1∑m(hθ(x(i))−y)xj(i)+mλθj