维数灾难(curse of dimensionality)
分类器的性能随着特征个数的变化不断增加,但过了某一个值后,性能开始下降,这种现象称为“维数灾难”。
维数灾难的影响——过拟合
- 随着特征数量的增加,特征空间内的样本密度会更加稀疏,也就更容易找到一个超平面将训练样本分开;
- 但是训练样本越稀疏,分类器的参数估计就会越不准确,更加容易出现过拟合问题。
事实上,增加特征数量使得高维空间线性可分,相当于在低维空间内训练一个复杂的非线性分类器。不过,这个非线性分类器太过“聪明”,仅仅学到了一些特例。如果将其用来辨别那些未曾出现在训练样本中的测试样本时,通常结果不太理想,也就是出现过拟合问题。
维数灾难的影响——训练样本的稀疏性并不是均匀分布的
假设特征的值域是0到1,二维特征空间为边长为1的正方形,三维特征空间为边长为1的立方体,高维特征空间为边长为1的超立方体,超立方体的体积为1,如上图所示。与超立方体内切的超球面是半径为0.5的超球面,体积为
V
(
d
)
=
π
d
/
2
Γ
(
d
2
+
1
)
0.
5
d
V(d)=\frac{\pi^{d/2}}{\Gamma(\frac{d}{2}+1)}0.5^d
V(d)=Γ(2d+1)πd/20.5d
超球面的体积与维度
d
d
d的关系图形展示为,
可以看出随着特征数量的增加,超球面的体积逐渐减小直至趋向于零,然而超立方体的体积却不变。也就是说,在高维特征空间中,大多数样本位于超立方体的角落,处于中心位置的训练样本比四周的训练样本更加稀疏。进一步地,记
d
i
s
t
m
a
x
dist_{max}
distmax、
d
i
s
m
i
n
dis_{min}
dismin分别表示样本到中心的最大距离与最小距离,则有
lim
d
→
∞
d
i
s
t
m
a
x
−
d
i
s
t
m
i
n
d
i
s
t
m
i
n
→
0
\lim_{d\rightarrow\infty}\frac{dist_{max}-dist_{min}}{dist_{min}}\rightarrow0
d→∞limdistmindistmax−distmin→0
因此,在高维特征空间中对于样本距离的度量失去意义。由于分类器基本都依赖于如Euclidean距离,Manhattan距离等,所以在特征数量过大时,分类器的性能就会出现下降。
- 样本是稀疏的,当时相对于整个特征空间来说,分布是密集的。
- 低维空间中,内切圆相对整个正方形来说占很大比例,但这没办法推广到高维空间。
理论上,如果训练样本的数量无限大,那么就不会存在“维数灾难”,我们可以采用任意多的特征来训练分类器。事实上,训练样本的数量是有限的,所以不应该采用过多的特征。此外,那些需要精确的非线性决策边界的分类器,比如neural network,knn,decision trees等的泛化能力往往并不是很好,更容易发生过拟合问题。因此,在设计这些分类器时应当慎重考虑特征的数量。相反,那些泛化能力较好的分类器,比如naive Bayesian,linear classifier等,可以适当增加特征的数量。
详细的分析例子可以参考博文:分类问题中的“维数灾难”
降维:
- 直接降维/特征选择:直接扔掉若干个不相关的特征,比如LASSO;
- 线性降维:PCA、MDS(多维缩放);
- 非线性降维:流行(嵌入高维空间中的低维结构)学习,比如度量映射、局部线性嵌入。
PCA主成分分析
无监督降维。目标是降维后的数据方差尽可能的大。
作用:
- 聚类:把复杂的多维数据点,简化成少量数据点,易于分簇。
- 降维:降低高维数据维度,简化计算,达到数据降维、压缩、降噪的目的。
PCA的原理
- 将原有的
p
p
p维数据集,转换为
k
k
k维数据,
k
<
p
k<p
k<p。
- 寻找当前所在的 p p p线性空间的一个 k k k维线性子空间,在这个 k k k维空间表示这些数据(将数据投影到 k k k维空间);
- k k k维子空间的各个维度是正交的:各个维度之间不相关。
- 新生成的
k
k
k维数据尽可能多的包含原来
p
p
p维数据的信息:降维后数据应尽可能的分散,必然要求样本在每个维度上的投影都尽可能分散,用方差来衡量分散程度。
- 这一点可通过下图来理解,当将数据投影到 x x x轴时,即将二维空间降维到 x x x轴这个一维空间,会有两个数据重合,它们在新的一维空间所表达的信息是相同的;而投影到 y = x y=x y=x这条直线时,所有数据都得以保留。
PCA的数学推导
设有包含
n
n
n个样本的训练数据集
T
=
{
x
1
,
x
2
,
.
.
.
,
x
n
}
T=\{x_1,x_2,...,x_n\}
T={x1,x2,...,xn},每个样本
x
i
x_i
xi都是
p
p
p维的,
x
i
=
(
x
i
1
,
x
i
2
,
.
.
.
,
x
i
p
)
T
x_i=(x_{i1},x_{i2},...,x_{ip})^T
xi=(xi1,xi2,...,xip)T为
p
p
p维列向量,现要将其降到
k
k
k维。记
X
=
(
x
1
,
x
2
,
.
.
.
,
x
n
)
T
X=(x_1,x_2,...,x_n)^T
X=(x1,x2,...,xn)T。
不妨假设样本均值为0,否则,对数据做去均值处理:
x
i
−
x
ˉ
=
x
i
−
1
n
∑
j
=
1
n
x
j
,
i
=
1
,
2
,
.
.
.
,
n
x_i-\bar{x}=x_i-\frac{1}{n}\sum_{j=1}^n x_j,\quad i=1,2,...,n
xi−xˉ=xi−n1j=1∑nxj,i=1,2,...,n
由于样本均值为0,
X
X
X的样本协方差矩阵
C
o
v
(
X
)
Cov(X)
Cov(X)为
S
=
1
n
−
1
∑
i
=
1
n
x
i
x
i
T
=
1
n
X
T
X
S=\frac{1}{n-1}\sum_{i=1}^n x_ix_i^T=\frac{1}{n}X^TX
S=n−11i=1∑nxixiT=n1XTX
假设我们找到的
k
k
k维线性子空间的一组基为
{
u
1
,
u
2
,
.
.
.
,
u
k
}
\{u_1,u_2,...,u_k\}
{u1,u2,...,uk},其中
u
i
u_i
ui是
p
p
p维列向量,是在当前
p
p
p维空间下的坐标表示,记
U
=
(
u
1
,
u
2
,
.
.
.
,
u
k
)
U=(u_1,u_2,...,u_k)
U=(u1,u2,...,uk)。不妨设
∣
∣
u
i
∣
∣
2
2
=
u
i
T
u
i
=
1
||u_i||_2^2=u_i^Tu_i=1
∣∣ui∣∣22=uiTui=1,否则,令
u
i
=
u
i
∣
∣
u
i
∣
∣
2
2
u_i=\frac{u_i}{||u_i||_2^2}
ui=∣∣ui∣∣22ui。
一个好的
k
k
k维空间应保证样本在每个维度的投影的方差尽可能的大,以维度
u
1
u_1
u1为例,样本在维度
u
1
u_1
u1的投影为:
z
i
=
u
1
T
x
i
,
i
=
1
,
2
,
.
.
.
,
n
z_i=u_1^Tx_i,\quad i=1,2,...,n
zi=u1Txi,i=1,2,...,n
计算
z
i
,
i
=
1
,
2
,
.
.
.
,
n
z_i,i=1,2,...,n
zi,i=1,2,...,n的样本均值与方差:
z
ˉ
=
1
n
∑
i
=
1
n
u
1
T
x
i
=
u
1
T
x
ˉ
=
0
\bar{z}=\frac{1}{n}\sum_{i=1}^nu_1^Tx_i=u_1^T\bar{x}=0
zˉ=n1i=1∑nu1Txi=u1Txˉ=0
C
o
v
(
z
)
=
1
n
−
1
∑
i
=
1
n
(
u
1
T
x
i
)
2
=
1
n
−
1
∑
i
=
1
n
u
1
T
x
i
x
i
T
u
1
=
u
1
T
(
1
n
−
1
∑
i
=
1
n
x
i
x
i
T
)
u
1
=
u
1
T
S
u
1
Cov(z)=\frac{1}{n-1}\sum_{i=1}^n(u_1^Tx_i)^2=\frac{1}{n-1}\sum_{i=1}^nu_1^Tx_ix_i^Tu_1=u_1^T(\frac{1}{n-1}\sum_{i=1}^nx_ix_i^T)u_1=u_1^TSu_1
Cov(z)=n−11i=1∑n(u1Txi)2=n−11i=1∑nu1TxixiTu1=u1T(n−11i=1∑nxixiT)u1=u1TSu1
我们的目标是极大化
C
o
v
(
z
)
Cov(z)
Cov(z):
max
u
1
u
1
T
S
u
1
s
.
t
.
∣
∣
u
1
∣
∣
2
2
=
1
\begin{aligned} &\max_{u_1} \quad u_1^TSu_1\\ &s.t. \quad \quad ||u_1||_2^2=1 \end{aligned}
u1maxu1TSu1s.t.∣∣u1∣∣22=1
定义拉格朗日函数
u
1
T
S
u
1
+
λ
(
1
−
∣
∣
u
1
∣
∣
2
2
)
u_1^TSu_1+\lambda(1-||u_1||_2^2)
u1TSu1+λ(1−∣∣u1∣∣22)
关于
u
1
u_1
u1求导
2
S
u
1
+
λ
(
−
2
u
1
)
=
0
2Su_1+\lambda(-2u_1)=0
2Su1+λ(−2u1)=0
即有
S
u
1
=
λ
u
1
Su_1=\lambda u_1
Su1=λu1
将上式带入
C
o
v
(
z
)
Cov(z)
Cov(z)
C
o
v
(
z
)
=
u
1
T
S
u
1
=
u
1
T
λ
u
1
=
λ
∣
∣
u
1
∣
∣
2
2
=
λ
Cov(z)=u_1^TSu_1=u_1^T\lambda u_1=\lambda ||u_1||_2^2=\lambda
Cov(z)=u1TSu1=u1Tλu1=λ∣∣u1∣∣22=λ
这表明,数据集在特征向量方向上的投影方差最大,并且投影的方差为相应的特征值。
最优的 { u 1 , u 2 , . . . , u k } \{u_1,u_2,...,u_k\} {u1,u2,...,uk}应是这样的:将样本协方差矩阵 S S S的特征从大到小排序,前 k k k特征值 λ 1 , λ 2 , . . . , λ k \lambda_1,\lambda_2,...,\lambda_k λ1,λ2,...,λk,取相应的特征向量为 k k k维空间的基
kernel PCA
一般而言,
n
n
n条数据在
p
(
p
<
n
)
p(p<n)
p(p<n)空间中线性不可分,但在
d
(
d
≥
n
)
d(d\geq n)
d(d≥n)维空间中是线性可分的。也就是说,如果能将
n
n
n条数据映射到一个
d
(
d
≥
n
)
d(d\geq n)
d(d≥n)维空间中,就可以很容易地构建超平面将数据点进行分类。
设有映射
Φ
\Phi
Φ将
X
X
X映射到高维特征空间
F
\mathcal{F}
F,
Φ
(
X
)
⊆
F
⊆
R
d
(
d
>
p
)
\Phi(X)\subseteq \mathcal{F}\subseteq\mathbb{R}^d(d>p)
Φ(X)⊆F⊆Rd(d>p),
Φ
:
x
i
→
Φ
(
x
i
)
\Phi: x_i\rightarrow \Phi(x_i)
Φ:xi→Φ(xi)
并且在高维特征空间中,样本均值为0,
∑
i
=
1
n
Φ
(
x
i
)
=
0
\sum_{i=1}^n\Phi(x_i)=0
i=1∑nΦ(xi)=0
虽然在
F
\mathcal{F}
F中容易对数据进行分类,但是高维空间计算复杂,需要对再对
Φ
(
X
)
\Phi(X)
Φ(X)进行PCA降维。协方差矩阵
C
o
v
(
Φ
(
X
)
)
Cov(\Phi(X))
Cov(Φ(X))为,
C
=
1
n
−
1
∑
i
=
1
n
Φ
(
x
i
)
Φ
(
x
i
)
T
=
1
n
−
1
Φ
(
X
)
T
Φ
(
X
)
C=\frac{1}{n-1}\sum_{i=1}^n\Phi(x_i)\Phi(x_i)^T=\frac{1}{n-1}\Phi(X)^T\Phi(X)
C=n−11i=1∑nΦ(xi)Φ(xi)T=n−11Φ(X)TΦ(X)
求解协方差矩阵
C
C
C的特征值,
C
v
=
λ
v
Cv=\lambda v
Cv=λv
带入,
1
n
−
1
Φ
(
X
)
T
Φ
(
X
)
v
=
1
n
−
1
∑
i
=
1
n
Φ
(
x
i
)
Φ
(
x
i
)
T
v
=
λ
v
\frac{1}{n-1}\Phi(X)^T\Phi(X)v=\frac{1}{n-1}\sum_{i=1}^n\Phi(x_i)\Phi(x_i)^T v=\lambda v
n−11Φ(X)TΦ(X)v=n−11i=1∑nΦ(xi)Φ(xi)Tv=λv
Φ
(
X
)
T
Φ
(
X
)
\Phi(X)^T\Phi(X)
Φ(X)TΦ(X)与
C
C
C的特征向量相同,因此可去掉
1
n
−
1
\frac{1}{n-1}
n−11,考虑
Φ
(
X
)
T
Φ
(
X
)
v
=
∑
i
=
1
n
Φ
(
x
i
)
Φ
(
x
i
)
T
v
=
λ
v
(
1
)
\Phi(X)^T\Phi(X)v=\sum_{i=1}^n\Phi(x_i)\Phi(x_i)^T v=\lambda v\quad\quad (1)
Φ(X)TΦ(X)v=i=1∑nΦ(xi)Φ(xi)Tv=λv(1)
PCA降维时,我们只需找较大的特征值对应的特征向量,而不需要计算0特征值对应的特征向量,因此,考虑
λ
≠
0
\lambda\neq0
λ=0,两边都是除以
λ
\lambda
λ,
v
=
1
λ
∑
i
=
1
n
(
Φ
(
x
i
)
[
Φ
(
x
i
)
T
v
]
)
v=\frac{1}{\lambda}\sum_{i=1}^n(\Phi(x_i)[\Phi(x_i)^T v])
v=λ1i=1∑n(Φ(xi)[Φ(xi)Tv])
等式右边方括号内为标量,上式表明,当
λ
≠
0
\lambda\neq0
λ=0时,对应的特征向量
v
v
v可以表示为所有
Φ
(
x
i
)
\Phi(x_i)
Φ(xi)的线性组合,即
v
=
∑
i
=
1
n
α
i
Φ
(
x
i
)
=
Φ
(
X
)
T
α
v=\sum_{i=1}^n\alpha_i\Phi(x_i)=\Phi(X)^T\alpha
v=i=1∑nαiΦ(xi)=Φ(X)Tα
其中
α
=
(
α
1
,
α
2
,
.
.
.
,
α
n
)
T
\alpha=(\alpha_1,\alpha_2,...,\alpha_n)^T
α=(α1,α2,...,αn)T。
带入(1)式,
Φ
(
X
)
T
Φ
(
X
)
Φ
(
X
)
T
α
=
λ
Φ
(
X
)
T
α
\Phi(X)^T\Phi(X)\Phi(X)^T\alpha=\lambda \Phi(X)^T\alpha
Φ(X)TΦ(X)Φ(X)Tα=λΦ(X)Tα
左乘
Φ
(
X
)
\Phi(X)
Φ(X),
Φ
(
X
)
Φ
(
X
)
T
Φ
(
X
)
Φ
(
X
)
T
Φ
(
X
)
α
=
λ
Φ
(
X
)
Φ
(
X
)
T
α
\Phi(X)\Phi(X)^T\Phi(X)\Phi(X)^T\Phi(X)\alpha=\lambda \Phi(X)\Phi(X)^T\alpha
Φ(X)Φ(X)TΦ(X)Φ(X)TΦ(X)α=λΦ(X)Φ(X)Tα
定义矩阵
K
=
Φ
(
X
)
Φ
(
X
)
T
K=\Phi(X)\Phi(X)^T
K=Φ(X)Φ(X)T,则
k
k
k为
n
×
n
n\times n
n×n的对称半正定矩阵,其第
i
i
i行
j
j
j列的元素为
K
i
j
=
Φ
(
x
i
)
T
Φ
(
x
i
)
K_{ij}=\Phi(x_i)^T\Phi(x_i)
Kij=Φ(xi)TΦ(xi),则
K
K
α
=
λ
α
KK\alpha=\lambda\alpha
KKα=λα
构建核函数
K
(
x
j
,
x
k
)
=
Φ
(
x
j
)
T
Φ
(
x
k
)
(
2
)
K(x_j,x_k)=\Phi(x_j)^T\Phi(x_k)\quad\quad\quad(2)
K(xj,xk)=Φ(xj)TΦ(xk)(2)
为求解(2)式,需求解,
K
α
=
λ
α
K\alpha=\lambda\alpha
Kα=λα
定义核函数
K
(
x
,
y
)
=
Φ
(
x
)
T
Φ
(
y
)
K(x,y)=\Phi(x)^T\Phi(y)
K(x,y)=Φ(x)TΦ(y),则我们不需要显式定义
Φ
\Phi
Φ,这就是核技巧。