训练误差与泛化误差
通常我们把分类错误的样本数占样本总数的比例称为“错误率”(errorrate),即如果在m个样本中有α个样本分类错误,则错误率 E = a / m E=a/m E=a/m;相应的, 1 − a / m 1- a/m 1−a/m称为“精度”(accuracy),即“精度=1-错误率”.更一般地,我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为“训练误差”(training error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差”(generalizationerror).显然,我们希望得到泛化误差小的学习器.然而,我们事先并不知道新样本是什么样,实际能做的是努力使经验误差最小化.在很多情况下,我们可以学得一个经验误差很小、在训练集上表现很好的学习器,例如甚至对所有训练样本都分类正确,即分类错误率为零,分类精度为100%,遗憾的是,这样的学习器在多数情况下都不好.
过拟合(方差)与(欠拟合)
我们实际希望的,是在新样本上能表现得很好的学习器.为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判别.然而,当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降.这种现象在机器学习中称为“过拟合”(overfitting).与“过拟合”相对的是“欠拟合”(underfitting),这是指对训练样本的一般性质尚未学好.
回归问题中的欠拟合与过拟合
下图是一个回归问题的例子:
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适。
分类问题中的欠拟合与过拟合
分类问题中也存在这样的问题:
就以多项式理解,
x
x
x的次数越高,拟合的越好,但相应的预测的能力就可能变差。
偏差与方差
从偏差与方差的角度来分析模型常常会有四种情况:
偏差很低,方差很高: 意味着训练误差很低,测试误差很高,此时发生了过拟合现象。
偏差很高,方差很低: 意味着训练误差,测试误差都很高,此时发生了欠拟合现在。
偏差,方差都很高: 意味着此时同时发生了欠拟合和过拟合现象。
偏差很低,方差很低: 意味着训练误差很低,测试误差也很低,表示我们的模型训练的结果很好。
一般来说,偏差与方差是有冲突的,这称为偏差-方差窘境(bias-variance dilemma)。下图给出了一个示意图。给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。
解决方法
1.欠拟合通常是由于学习能力低下造成的,欠拟合比较容易克服,例如在决策树学习中扩展分支、在神经网络中增加训练轮数。
2.而过拟合则很麻烦,过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者说减小其风险。常用的方法:
丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA)
正则化。 保留所有的特征,但是减少参数的大小。
正则化
正则化项即惩罚函数,该项对模型向量进行“惩罚“,从而避免单纯最小二乘问题的过拟合问题。或者说正则化参数等价于对参数引入先验分布,使得模型复杂度变小(缩小解空间),对于噪声以及异常值的鲁棒性增强(泛化能力)。
正则化项本质上是一种先验信息,整个最优化问题从贝叶斯观点来看是一种贝叶斯最大后验估计,其中正则化项对应后验估计中的先验信息,损失函数对应后验估计中的似然函数,两者的乘积即对应贝叶斯最大后验估计的形式,如果你将这个贝叶斯最大后验估计的形式取对数,即进行极大似然估计,你就会发现问题立马变成了损失函数+正则化项的最优化问题形式。
其主要作用就是:
- 保留所有的特征,减小特征的权重 θ j {\theta_j} θj 的值。确保所有的特征对预测值都要少量的贡献。
- 当每个特征 x i x_i xi 对预测值 y y y都有少量贡献时,这样的模型可以良好地工作,这就是正则化的目的,可以用它解决特征过多时地过拟合问题。
正则化线性回归
正则化线性回归的代价函数为:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
[
(
f
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
n
θ
j
2
]
J({\theta}) = \frac{1}{{2m}}\sum\limits_{i = 1}^m [{{{(f({x^{_(i)}}) - {y^{_(i)}})}^2}}+\lambda \sum\limits_{j = 1}^n {\theta _j^2} ]
J(θ)=2m1i=1∑m[(f(x(i))−y(i))2+λj=1∑nθj2]公式前半部分是线性回归模型的损失函数,后半部分为加入的正则化项。其中
λ
\lambda
λ有两个目的,既要维持对训练样本的拟合,又要避免对训练样本的过拟合。如果
λ
\lambda
λ值太大,则能确保不出现过拟合,但可能会导致欠拟合。
从数学角度来看,损失函数增加了一个正则项后,损失函数不再唯一地由预测值与真实值的误差所决定了,还和参数
θ
\theta
θ的大小有关。有了这个限制之后,要实现损失函数最小的目的,
θ
\theta
θ就不能随便取值了。比如某个比较大的
θ
\theta
θ值可能会让预测值与真实值的误差
(
f
(
x
(
i
)
)
−
y
(
i
)
)
2
{(f({x^{(i)}}) - {y^{(i)}})^2}
(f(x(i))−y(i))2值很小,但会导致
θ
j
2
\theta_j^2
θj2 很大,最终结果就是损失函数太大。这样,通过调节参数
λ
\lambda
λ,就可以控制正则项的权重,从而避免线性回归算法过拟合。
我们要使用梯度下降法令这个代价函数最小化:
R
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
{
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
f
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
θ
j
:
=
θ
j
(
1
−
α
λ
m
)
−
α
1
m
∑
i
=
1
m
(
f
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
f
o
r
j
=
1
,
2
,
3
⋯
,
n
}
\begin{aligned} &Repeat \,until\,convergence \{\\ &{\theta _0} := {\theta _0} - \alpha \frac{1}{m}\sum\limits_{i = 1}^m {(f({x^{(i)}}) - {y^{(i)}})x_0^{(i)}} \\ &{\theta _j}: = {\theta _j}(1 - \alpha \frac{\lambda }{m}) - \alpha \frac{1}{m}\sum\limits_{i = 1}^m {(f({x^{(i)}}) - {y^{(i)}})x_j^{(i)}} \\ &for \,j=1,2,3\cdots ,n \\ \} \\ \end{aligned}
}Repeatuntilconvergence{θ0:=θ0−αm1i=1∑m(f(x(i))−y(i))x0(i)θj:=θj(1−αmλ)−αm1i=1∑m(f(x(i))−y(i))xj(i)forj=1,2,3⋯,n可以发现每次都在原有算法更新规则的基础上令
θ
\theta
θ值减少了一个额外的值。
正则化逻辑回归
正则化逻辑回归的代价函数为:
J
(
θ
)
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
log
(
f
(
x
(
i
)
)
)
−
(
1
−
y
(
i
)
)
log
(
1
−
f
(
x
(
i
)
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
J(\theta ) = \frac{1}{m}\sum\limits_{i = 1}^m {[ - {y^{(i)}}\log (f({x^{(i)}})) - (1 - {y^{(i)}})\log (1 - f({x^{(i)}}))]} + \frac{\lambda }{{2m}}\sum\limits_{j = 1}^n {\theta _j^2}
J(θ)=m1i=1∑m[−y(i)log(f(x(i)))−(1−y(i))log(1−f(x(i)))]+2mλj=1∑nθj2要最小化该代价函数,通过求导,得出梯度下降算法为:
R
e
p
e
a
t
u
n
t
i
l
c
o
n
v
e
r
g
e
n
c
e
{
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
f
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
θ
j
:
=
θ
j
(
1
−
α
λ
m
)
−
α
1
m
∑
i
=
1
m
(
f
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
f
o
r
j
=
1
,
2
,
3
⋯
,
n
}
\begin{aligned} &Repeat \,until\,convergence \{\\ &{\theta _0} := {\theta _0} - \alpha \frac{1}{m}\sum\limits_{i = 1}^m {(f({x^{(i)}}) - {y^{(i)}})x_0^{(i)}} \\ &{\theta _j}: = {\theta _j}(1 - \alpha \frac{\lambda }{m}) - \alpha \frac{1}{m}\sum\limits_{i = 1}^m {(f({x^{(i)}}) - {y^{(i)}})x_j^{(i)}} \\ &for \,j=1,2,3\cdots ,n \\ \} \\ \end{aligned}
}Repeatuntilconvergence{θ0:=θ0−αm1i=1∑m(f(x(i))−y(i))x0(i)θj:=θj(1−αmλ)−αm1i=1∑m(f(x(i))−y(i))xj(i)forj=1,2,3⋯,n
注:看上去同线性回归一样,但是知道
f
(
x
)
=
g
(
θ
T
X
)
=
1
1
+
e
−
θ
T
X
f(x) = g({\theta ^T}X)=\frac{1}{{1 + {e^{ - {\theta ^T}X}}}}
f(x)=g(θTX)=1+e−θTX1,所以与线性回归不同。
参考文献
周志华《机器学习》
吴恩达 机器学习
正则化
逻辑回归算法梳理(从理论到示例)