牛客网算法八股刷题系列——过拟合、模型复杂度与核函数
题目描述
在其他条件不变的前提下,以下哪种做法容易引起机器学习中的过拟合问题:
A \mathcal A \quad A增加训练集的样本量
B \mathcal B \quad B减少神经网络隐藏层结点数量
C \mathcal C \quad C删除稀疏的特征
D SVM \mathcal D \quad \text{SVM} DSVM算法中使用高斯核替代线性核
正确答案: D \mathcal D D
题目解析
过拟合现象描述以及发生原因
关于机器学习中的过拟合( Overfitting \text{Overfitting} Overfitting)问题,本质上是:模型在训练数据集上能够获取效果不错的拟合;但在训练数据外的数据集上却不能很好地拟合数据。造成过拟合现象的原因主要分为以下几种:
从样本角度观察过拟合现象:
- 样本分布不均匀:对数据集合
D
\mathcal D
D划分的过程中,无论将这些子集用作训练、验证、测试,都希望这些子集(这里统一称这些子集的符号为
D
′
\mathcal D'
D′)的真实模型
P
D
′
\mathcal P_{\mathcal D'}
PD′与数据集合的真实模型
P
D
\mathcal P_{\mathcal D}
PD相同,并且都等于处理该任务的客观真实模型
P
d
a
t
a
\mathcal P_{data}
Pdata:
P D ′ = P D = P d a t a \mathcal P_{\mathcal D'} = \mathcal P_{\mathcal D} = \mathcal P_{data} PD′=PD=Pdata
但真实情况可能是: D \mathcal D D自身就是一个分布不均匀的数据集合;在划分子集的过程中,会将这个不均匀的效果放大。产生 D \mathcal D D分布不均匀的主要原因有:
核心原因是采集的样本数据不足以代表处理任务的规则。
- 样本数量太少产生的样本分布稀疏现象;
- 采样方法错误:例如采样的样本空间与该任务真实的样本空间不匹配。也就是说,针对该任务,可能仅考虑了某些情况,并以此进行采样作为数据集合,而忽略了其他情况,从而忽略了对应的样本。
- 样本标签错误;
- 样本噪声的干扰过大:作为样本角度,这里描述的是样本自身的特征属性不稳定,从而造成数据集合自身不准确,性能较差。
从模型角度观察过拟合现象:
- 样本噪声干扰过大:作为模型角度,这里是指模型对样本特征学习的过于精确,从而使部分噪声学习成样本特征,从而使得该模型仅在局部数据集内存在好的拟合效果。
- 模型自身过于复杂,参数过多。
- 关于神经网络模型:对于决策边界的选择不唯一,从而选择了复杂的决策边界。
过拟合现象的解决方法
关于样本分布不均匀产生的情况,有:
- 增加样本数量;
- 对处理任务的样本空间作充分调查,尽可能从任务对应的完整样本空间中进行采样;
- 保留验证数据集,对训练好的模型进行验证;
- 对额外数据进行交叉验证;
- 详细检查样本标签的准确性(这个绝大多数是人为错误)
- 针对样本分布稀疏,使用降维去除不必要的维度。
关于模型角度,主要分以下几种解决方式:
- 学习过程中对模型参数增加惩罚项。代表方法正则化
- 人为控制模型训练/学习的程度;
- 降低模型复杂度。例如神经网络模型中的 Dropout,BatchNormalization \text{Dropout,BatchNormalization} Dropout,BatchNormalization,以及缩减隐藏层的神经元规模等。
关于 C \mathcal C C选项:删除稀疏特征
回归本题:
A
\mathcal A\quad
A 选项是针对样本分布不均匀的解决方式;
B \mathcal B\quad B 选项是针对降低模型复杂度的解决方式。这里不过多赘述。
关于
C
\mathcal C\quad
C 选项:删除稀疏特征本质上是降维的另一种表达方式。在最大投影方差角度观察主成分分析中介绍过,降维后新的正交基就是样本集合协方差矩阵
S
\mathcal S
S的特征值
λ
\lambda
λ对应的特征向量
u
⃗
\vec u
u:
S
⋅
u
⃗
=
λ
⋅
u
⃗
\mathcal S \cdot \vec u = \lambda \cdot \vec u
S⋅u=λ⋅u
并且将最大特征值对应的特征向量称作第一主成分;以此类推,有第二、第三主成分等等。并且这些特征向量之间两两正交。
而降维的目的就是消除掉结果较小的特征值对应的特征向量。而这些特征向量上的样本特征属于稀疏特征。即:即便删除了,也对整个样本空间影响不大的特征信息。
D \mathcal D D选项:核函数简单介绍
核函数(
Kernel Function
\text{Kernel Function}
Kernel Function)在核方法思想与核函数介绍中提到过,它本质上是对优化过程中对偶问题产生的样本之间内积的一种处理方式:
[
x
(
i
)
]
T
x
(
j
)
[x^{(i)}]^T x^{(j)}
[x(i)]Tx(j)
在处理非线性问题时,针对线性模型无法对样本线性可分的情况,通常将样本特征转化为高维特征:
[
x
(
i
)
]
p
×
1
⇒
[
ϕ
(
x
(
i
)
)
]
q
×
1
p
≪
q
;
x
(
i
)
∈
D
[x^{(i)}]_{p \times 1} \Rightarrow [\phi(x^{(i)})]_{q \times 1} \quad p \ll q;x^{(i)} \in \mathcal D
[x(i)]p×1⇒[ϕ(x(i))]q×1p≪q;x(i)∈D
对应的内积结果表示为:
[
ϕ
(
x
(
i
)
)
]
T
ϕ
(
x
(
j
)
)
x
(
i
)
,
x
(
j
)
∈
D
[\phi(x^{(i)})]^T\phi(x^{(j)}) \quad x^{(i)},x^{(j)} \in \mathcal D
[ϕ(x(i))]Tϕ(x(j))x(i),x(j)∈D
但是转化后的特征维度
q
q
q可能远远高于
p
p
p的维度,甚至是无限维,那么关于内积结果的计算代价极高。由于内积是一个标量结果,所以通过核函数直接与内积进行映射,从而节省大量计算过程:
κ
(
x
(
i
)
,
x
(
j
)
)
=
[
ϕ
(
x
(
i
)
)
]
T
ϕ
(
x
(
j
)
)
\kappa(x^{(i)},x^{(j)}) = [\phi(x^{(i)})]^T\phi(x^{(j)})
κ(x(i),x(j))=[ϕ(x(i))]Tϕ(x(j))
不同核函数与模型复杂度的关系
虽然核函数自身减少了内积计算过程,但核函数自身同样存在计算代价。下面从计算代价的角度,介绍几种常见核函数:
线性核函数 ( Linear Kernel ) (\text{Linear Kernel}) (Linear Kernel)
关于线性核函数的公式表示如下:
κ
(
x
(
i
)
,
x
(
j
)
)
=
[
x
(
i
)
]
T
x
(
j
)
=
∑
k
=
1
p
x
k
(
i
)
⋅
x
k
(
j
)
\begin{aligned} \kappa(x^{(i)},x^{(j)}) & = [x^{(i)}]^T x^{(j)} \\ & = \sum_{k=1}^p x_k^{(i)} \cdot x_k^{(j)} \end{aligned}
κ(x(i),x(j))=[x(i)]Tx(j)=k=1∑pxk(i)⋅xk(j)
实际上,线性核函数并没有对样本
x
(
i
)
x^{(i)}
x(i)的维度产生任何变化,即
ϕ
(
x
(
i
)
)
=
x
(
i
)
\phi(x^{(i)}) = x^{(i)}
ϕ(x(i))=x(i)。所有的特征分量均是一次项。
多项式核函数 ( Polynomial Kernel Function ) (\text{Polynomial Kernel Function}) (Polynomial Kernel Function)
关于多项式核函数的公式表示如下:
κ
(
x
(
i
)
,
x
(
j
)
)
=
(
ζ
+
γ
[
x
(
i
)
]
T
x
(
j
)
)
Q
=
[
ζ
+
γ
⋅
(
∑
k
=
1
p
x
k
(
i
)
⋅
x
k
(
j
)
)
]
Q
\begin{aligned} \kappa(x^{(i)},x^{(j)}) & = (\zeta + \gamma [x^{(i)}]^Tx^{(j)})^{\mathcal Q} \\ & = \left[\zeta + \gamma \cdot \left(\sum_{k=1}^p x_k^{(i)} \cdot x_k^{(j)}\right)\right]^{\mathcal Q} \end{aligned}
κ(x(i),x(j))=(ζ+γ[x(i)]Tx(j))Q=[ζ+γ⋅(k=1∑pxk(i)⋅xk(j))]Q
其中
ζ
,
γ
,
Q
\zeta,\gamma,\mathcal Q
ζ,γ,Q均表示参数。当
ζ
=
0
,
γ
=
Q
=
1
\zeta = 0,\gamma = \mathcal Q = 1
ζ=0,γ=Q=1时,多项式核函数将退化至线性核函数。
高斯核函数 ( Radial Basis Function,RBF ) (\text{Radial Basis Function,RBF}) (Radial Basis Function,RBF)
高斯核函数的公式表示如下:
κ
(
x
(
i
)
,
x
(
j
)
)
=
exp
{
−
1
2
σ
2
∣
∣
x
(
i
)
−
x
(
j
)
∣
∣
2
}
\kappa(x^{(i)},x^{(j)}) = \exp \left\{- \frac{1}{2\sigma^2} ||x^{(i)} - x^{(j)}||^2 \right\}
κ(x(i),x(j))=exp{−2σ21∣∣x(i)−x(j)∣∣2}
其中
∣
∣
⋅
∣
∣
||\cdot||
∣∣⋅∣∣表示向量的模。观察高斯核函数自身的复杂度,将上述公式展开表示如下:
κ
(
x
(
i
)
,
x
(
j
)
)
=
exp
{
−
∣
∣
x
(
i
)
−
x
(
j
)
∣
∣
2
}
2
σ
2
\begin{aligned} \kappa(x^{(i)},x^{(j)}) = \sqrt[2\sigma^2]{\exp\{-||x^{(i)} - x^{(j)}||^2\}} \end{aligned}
κ(x(i),x(j))=2σ2exp{−∣∣x(i)−x(j)∣∣2}
其中
⋅
2
σ
2
\sqrt[2\sigma^2]{\cdot}
2σ2⋅表示样本划分的细致程度,它和模型的复杂度无关,这里仅关心根号内的项。并将该项展开:
exp
{
−
∣
∣
x
(
i
)
−
x
(
j
)
∣
∣
2
}
=
exp
{
−
[
∣
∣
x
(
i
)
∣
∣
2
+
∣
∣
x
(
j
)
∣
∣
2
−
2
∣
∣
x
(
i
)
x
(
j
)
∣
∣
]
}
=
exp
[
−
(
x
(
i
)
)
2
]
⋅
exp
[
−
(
x
(
j
)
)
2
]
⋅
exp
[
2
(
x
(
i
)
)
T
x
(
j
)
]
\begin{aligned} \exp\{-||x^{(i)} - x^{(j)}||^2\} & = \exp \left\{- \left[||x^{(i)}||^2 + ||x^{(j)}||^2 - 2 ||x^{(i)}x^{(j)}||\right]\right\} \\ & = \exp[-(x^{(i)})^2] \cdot \exp [-(x^{(j)})^2] \cdot \exp \left[2(x^{(i)})^Tx^{(j)}\right] \end{aligned}
exp{−∣∣x(i)−x(j)∣∣2}=exp{−[∣∣x(i)∣∣2+∣∣x(j)∣∣2−2∣∣x(i)x(j)∣∣]}=exp[−(x(i))2]⋅exp[−(x(j))2]⋅exp[2(x(i))Tx(j)]
将
exp
[
2
x
(
i
)
⋅
x
(
j
)
]
\exp \left[2x^{(i)}\cdot x^{(j)}\right]
exp[2x(i)⋅x(j)]用泰勒公式进行展开:
exp
[
2
(
x
(
i
)
)
T
x
(
j
)
]
=
∑
m
=
0
∞
[
2
(
x
(
i
)
)
T
x
(
j
)
]
m
m
!
=
∑
m
=
0
∞
[
2
m
m
!
⋅
2
m
m
!
(
x
(
i
)
)
m
⋅
(
x
(
j
)
)
m
]
\begin{aligned} \exp \left[2(x^{(i)})^T x^{(j)}\right] & = \sum_{m=0}^\infty \frac{\left[2 (x^{(i)})^Tx^{(j)}\right]^m}{m!} \\ & = \sum_{m=0}^{\infty} \left[\sqrt{\frac{2^m}{m!}} \cdot \sqrt{\frac{2^m}{m!}} (x^{(i)})^m \cdot (x^{(j)})^m\right] \end{aligned}
exp[2(x(i))Tx(j)]=m=0∑∞m![2(x(i))Tx(j)]m=m=0∑∞[m!2m⋅m!2m(x(i))m⋅(x(j))m]
至此将
exp
{
−
∣
∣
x
(
i
)
−
x
(
j
)
∣
∣
2
}
\exp\{-||x^{(i)} - x^{(j)}||^2\}
exp{−∣∣x(i)−x(j)∣∣2}划分为仅包含
x
(
i
)
x^{(i)}
x(i)项和仅包含
x
(
j
)
x^{(j)}
x(j)项两个部分:
exp
{
−
∣
∣
x
(
i
)
−
x
(
j
)
∣
∣
2
}
=
{
exp
[
−
(
x
(
i
)
)
2
]
⋅
∑
m
=
0
∞
2
m
m
!
(
x
(
i
)
)
m
}
⏟
ϕ
(
x
(
i
)
)
⋅
{
exp
[
−
(
x
(
j
)
)
]
⋅
∑
m
=
0
∞
2
m
m
!
(
x
(
j
)
)
m
}
⏟
ϕ
(
x
(
j
)
)
\exp\{-||x^{(i)} - x^{(j)}||^2\} = \underbrace{\left\{\exp[-(x^{(i)})^2] \cdot\sum_{m=0}^{\infty}\sqrt{\frac{2^m}{m!}}(x^{(i)})^m\right\}}_{\phi(x^{(i)})} \cdot \underbrace{\left\{\exp[-(x^{(j)})] \cdot \sum_{m=0}^{\infty} \sqrt{\frac{2^m}{m!}}(x^{(j)})^m\right\}}_{\phi(x^{(j)})}
exp{−∣∣x(i)−x(j)∣∣2}=ϕ(x(i))
{exp[−(x(i))2]⋅m=0∑∞m!2m(x(i))m}⋅ϕ(x(j))
{exp[−(x(j))]⋅m=0∑∞m!2m(x(j))m}
在除去
σ
\sigma
σ影响的条件下,观察
D
\mathcal D\quad
D 选项,比较线性核函数与高斯核函数关于高维特征转化之间的复杂程度:
{
Linear Kernel:
ϕ
(
x
(
i
)
)
=
x
(
i
)
RBF:
ϕ
(
x
(
i
)
)
=
exp
[
−
(
x
(
i
)
)
2
]
⋅
∑
m
=
0
∞
2
m
m
!
(
x
(
i
)
)
m
\begin{cases} \text{Linear Kernel: } \phi(x^{(i)}) = x^{(i)} \\ \text{RBF: } \phi(x^{(i)}) = \exp[-(x^{(i)})^2] \cdot\sum_{m=0}^{\infty}\sqrt{\frac{2^m}{m!}}(x^{(i)})^m \end{cases}
{Linear Kernel: ϕ(x(i))=x(i)RBF: ϕ(x(i))=exp[−(x(i))2]⋅∑m=0∞m!2m(x(i))m
- 当 m m m越来越大时, ϕ ( x ( i ) ) \phi(x^{(i)}) ϕ(x(i))越来越复杂,从而模型复杂度越来越高。模型拟合的功能就越强,从而越容易产生过拟合现象。
- 当 m = 1 m=1 m=1时,虽然两种核函数对应的 ϕ ( x ( i ) ) \phi(x^{(i)}) ϕ(x(i))均是一次项,但关于系数的复杂度依然是: RBF \text{RBF} RBF高于 Linear Kernel \text{Linear Kernel} Linear Kernel。
相关参考:
核函数 高斯核函数,线性核函数,多项式核函数