降维是一种常用的数据预处理方法。由于降维事实上是高维空间在低维空间上的投影,一般情况下可以使用线性映射做到这一点。而线性映射又可以用矩阵进行表示,本章也出现了大量的线性代数相关的概念和公式,包括特征值、特征向量、对角化、正交变换、迹等等。理解这些概念的定义和实际意义对本章的学习有很大的好处。这里推荐学习 李宏毅老师线性代数课程的相关章节。
k近邻学习(kNN)
k近邻学习(简称kNN)是一种常用的监督学习方法。这种方法在给定测试样本后,利用某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测;针对分类问题采用“投票法”,回归问题采用“平均法”。
kNN这种方法并没有显式的训练过程。这种学习方法被称为懒惰学习,反之则称为急切学习。
对于1NN(k=1)的情况,假设测试样本为
x
\boldsymbol{x}
x,其最邻近样本为
z
\boldsymbol{z}
z,则分类器出错的概率为:
P
(
e
r
r
)
=
1
−
∑
c
∈
Y
P
(
c
∣
x
)
P
(
c
∣
z
)
P(err)=1-\sum_{c\in \mathcal{Y}}{P(c\mid \boldsymbol{x})P(c\mid \boldsymbol{z})}
P(err)=1−c∈Y∑P(c∣x)P(c∣z)
假设样本独立同分布,且对任意
x
\boldsymbol{x}
x总能在附近任意近的范围内找到训练样本
z
\boldsymbol{z}
z(样本采样密集)。则有:
其中
c
∗
c^*
c∗是贝叶斯最优分类器的结果。可以看到,最近邻分类器虽简单,但它的泛化错误率不超过贝叶斯最优分类器的错误率的两倍。
低维嵌入
在前面的讨论中有一个重要假设;训练样本的采样密度足够大,这样上述推导中的约等于号才能够成立。然而,在属性维数较高,样本空间巨大的情况下,现实任务的采样很难满足密采样的条件。此外,许多学习方法都涉及距离计算,而高维空间会给距离计算带来很大的麻烦。这种在属性维度较高情况下出现的数据样本稀疏、距离计算困难等问题,是所有机器学习方法共同面临的严重障碍, 被称为维数灾难。解决这个问题的一个重要途径便是降维。
为什么能进行降维?在很多时候,观测或收集到的数据样本虽是高维的,但与学习任务密切相关的也许仅是某个低维分布,即高维空间中的一个低维嵌入。
一般来说,欲获得低维子空间,最简单的是对原始高维空间进行线性变换。给定
d
d
d维空间中的样本
X
=
(
x
1
,
x
2
,
…
,
x
m
)
∈
R
d
×
m
\boldsymbol{X}=(\boldsymbol{x_1},\boldsymbol{x_2},\dots,\boldsymbol{x_m})\in \mathbb{R}^{d\times m}
X=(x1,x2,…,xm)∈Rd×m,通过降维得到
d
′
≤
d
d'\leq d
d′≤d维空间中的样本
Z
=
(
z
1
,
z
2
,
…
,
z
m
)
∈
R
d
′
×
m
\boldsymbol{Z}=(\boldsymbol{z_1},\boldsymbol{z_2},\dots,\boldsymbol{z_m})\in \mathbb{R}^{d'\times m}
Z=(z1,z2,…,zm)∈Rd′×m,有:
Z
=
W
T
X
\boldsymbol{Z}=\boldsymbol{W^T}\boldsymbol{X}
Z=WTX
其中
W
∈
R
d
×
d
′
\boldsymbol{W}\in \mathbb{R}^{d\times d'}
W∈Rd×d′是变换矩阵,可视为
d
′
d'
d′个
d
d
d维基向量,
z
i
=
W
T
x
i
\boldsymbol{z_i}=\boldsymbol{W^T}\boldsymbol{x_i}
zi=WTxi是第
i
i
i个样本在
d
′
d'
d′维空间上的投影。
MDS算法
MDS(Multiple Dimensional Scaling)算法要求原始空间中样本之间的距离在低维空间中得以保持。即:
∥
z
i
−
z
j
∥
=
∥
x
i
−
x
j
∥
=
d
i
s
t
i
j
\Vert \boldsymbol{z_i}-\boldsymbol{z_j}\Vert = \Vert \boldsymbol{x_i}-\boldsymbol{x_j} \Vert={dist}_{ij}
∥zi−zj∥=∥xi−xj∥=distij
令
B
=
Z
T
Z
∈
R
m
×
m
\boldsymbol{B}=\boldsymbol{Z^T}\boldsymbol{Z}\in \mathbb{R}^{m\times m}
B=ZTZ∈Rm×m,其中
b
i
j
=
z
i
T
z
j
b_{ij}=\boldsymbol{z_i^T}\boldsymbol{z_j}
bij=ziTzj,经推导可得(这点看书吧阿巴阿巴):
b
i
j
=
−
1
2
(
d
i
s
t
i
j
2
−
d
i
s
t
i
⋅
2
−
d
i
s
t
⋅
j
2
+
d
i
s
t
⋅
⋅
2
)
b_{ij}=-\frac{1}{2}({dist}_{ij}^2-{dist}_{i\cdot}^2-{dist}_{\cdot j}^2+{dist}_{\cdot \cdot}^2)
bij=−21(distij2−disti⋅2−dist⋅j2+dist⋅⋅2)
矩阵
B
\boldsymbol{B}
B为对称矩阵,且为正定矩阵,可做对角化得到
B
=
V
Λ
V
T
\boldsymbol{B}=\boldsymbol{V}\boldsymbol{\Lambda}\boldsymbol{V^T}
B=VΛVT,其中
Λ
=
diag
(
λ
1
,
λ
2
,
…
,
λ
d
)
\boldsymbol{\Lambda}=\text{diag}(\lambda_1,\lambda_2,\dots,\lambda_d)
Λ=diag(λ1,λ2,…,λd),
λ
1
≥
λ
2
≥
⋯
≥
λ
d
≥
0
\lambda_1\geq \lambda_2\geq \dots \geq \lambda_d \geq 0
λ1≥λ2≥⋯≥λd≥0。假定降维至
d
′
d'
d′维空间,则将对应的对角矩阵改写为
Λ
~
=
diag
(
λ
1
,
λ
2
,
…
,
λ
d
’
)
\boldsymbol{\tilde{\Lambda}}=\text{diag}(\lambda_1,\lambda_2,\dots,\lambda_{d’})
Λ~=diag(λ1,λ2,…,λd’),
V
~
\boldsymbol{\tilde{V}}
V~为对应的特征向量矩阵,则:
Z
=
Λ
~
1
2
V
~
T
\boldsymbol{Z}=\boldsymbol{\tilde{\Lambda}}^{\frac{1}{2}}\boldsymbol{\tilde{V}}^T
Z=Λ~21V~T
以下是MDS算法的流程:
主成分分析(PCA)
主成分分析(PCA)是最常用的一种降维方法,它希望找到一个这样的超平面对正交属性空间中的样本点进行表达:
- 最近重构性:样本点到这个超平面的距离都足够近(样本向量在投影后要尽可能与原向量相似)。
- 最大可分性:样本点在这个超平面上的投影能尽可能分开。
基于最近重构性和最大可分性能分别得到主成分分析的两种等价推导。(推导过程等看懂了来补哈)
PCA算法要求解:
X
X
T
W
=
λ
W
\boldsymbol{X}\boldsymbol{X^T}\boldsymbol{W}=\lambda\boldsymbol{W}
XXTW=λW
算法流程如下:
(这里X进行了中性化,以保证协方差矩阵的表达形式)
核化线性降维
线性阵维方法假设从高维空间到低维空间的函数映射是线性的,然而,在不少现实任务中,可能需要非线性映射才能找到恰当的低维嵌入,这就需要使用到核函数对线性降维方法进行核化。
KPCA
PCA本来将样本集
X
\boldsymbol{X}
X投影到
W
\boldsymbol{W}
W确定的超平面上:
X
X
T
W
=
λ
W
\boldsymbol{X}\boldsymbol{X^T}\boldsymbol{W}=\lambda\boldsymbol{W}
XXTW=λW
KPCA先将
X
\boldsymbol{X}
X转换为
Z
\boldsymbol{Z}
Z从而将样本映射至高维特征空间,即令
z
i
=
ϕ
(
x
i
)
\boldsymbol{z_i}=\phi (\boldsymbol{x_i})
zi=ϕ(xi)。然而一般情况下,
ϕ
\phi
ϕ的具体形式是无法求得显式表达的,于是引入核函数:
κ
(
x
i
x
j
)
=
ϕ
(
x
i
)
T
ϕ
(
x
j
)
\kappa (\boldsymbol{x_i}\boldsymbol{x_j})={\phi (\boldsymbol{x_i})}^T\phi (\boldsymbol{x_j})
κ(xixj)=ϕ(xi)Tϕ(xj)
(核函数相当于在计算两个事件的相似度)
而
X
\boldsymbol{X}
X转为
Z
\boldsymbol{Z}
Z后,PCA应求解:
Z
Z
T
W
=
λ
W
\boldsymbol{Z}\boldsymbol{Z^T}\boldsymbol{W}=\lambda\boldsymbol{W}
ZZTW=λW
也即:
(
∑
i
=
1
m
ϕ
(
x
i
)
ϕ
(
x
j
)
T
)
W
=
λ
W
\Bigg( \sum_{i=1}^m{\phi(\boldsymbol{x_i}){\phi(\boldsymbol{x_j})}^T}\Bigg) \boldsymbol{W}=\lambda \boldsymbol{W}
(i=1∑mϕ(xi)ϕ(xj)T)W=λW
则:
也即:
W
=
∑
i
=
1
m
ϕ
(
x
i
)
α
i
\boldsymbol{W}=\sum_{i=1}^m{\phi(\boldsymbol{x_i})\boldsymbol{\alpha_i}}
W=i=1∑mϕ(xi)αi
所以:
Z
Z
T
W
=
Z
Z
T
Z
A
λ
W
=
λ
Z
A
=
Z
λ
A
\boldsymbol{Z}\boldsymbol{Z^T}\boldsymbol{W}=\boldsymbol{Z}\boldsymbol{Z^T}\boldsymbol{Z}\boldsymbol{A}\\ \lambda \boldsymbol{W}=\lambda \boldsymbol{Z}\boldsymbol{A}=\boldsymbol{Z}\lambda \boldsymbol{A}
ZZTW=ZZTZAλW=λZA=ZλA
而
Z
Z
T
W
=
λ
W
\boldsymbol{Z}\boldsymbol{Z^T}\boldsymbol{W}=\lambda\boldsymbol{W}
ZZTW=λW
因此:
Z
T
Z
A
=
λ
A
\boldsymbol{Z^T}\boldsymbol{Z}\boldsymbol{A}=\lambda \boldsymbol{A}
ZTZA=λA
也即:
K
A
=
λ
A
(
K
)
i
j
=
κ
(
x
i
x
j
)
\boldsymbol{K}\boldsymbol{A}=\lambda \boldsymbol{A} {(\boldsymbol{K})}_{ij}=\kappa (\boldsymbol{x_i}\boldsymbol{x_j})
KA=λA(K)ij=κ(xixj)
对于新样本
x
\boldsymbol{x}
x,投影后的坐标为:
z
=
w
T
ϕ
(
x
)
=
∑
i
=
1
m
α
i
ϕ
(
x
i
)
T
ϕ
(
x
)
=
∑
i
=
1
m
α
i
κ
(
x
i
x
)
\boldsymbol{z}=\boldsymbol{w^T}\phi(\boldsymbol{x})=\sum_{i=1}^m{\boldsymbol{\alpha_i}{\phi(\boldsymbol{x_i})}^T\phi(\boldsymbol{x})}=\sum_{i=1}^m{\boldsymbol{\alpha_i}\kappa (\boldsymbol{x_i}\boldsymbol{x})}
z=wTϕ(x)=i=1∑mαiϕ(xi)Tϕ(x)=i=1∑mαiκ(xix)
此式表明,为获得投影后的坐标, KPCA 需对所有样本求和,因此它的计算开销较大。
流形学习
流形学习是一类借鉴了拓扑流形概念的降维方法。它认为分布在高维空间的数据在局部具有欧氏空间的性质(“流形”是在局部与欧氏空间同胚的空间),能用欧氏距离来进行距离计算。因此,可以容易地在局部建立阵维映射关系,然后再设法将局部映射关系推广到全局。
等度量映射(Isomap)
这种方法认为低维流形嵌入到高维空间之后,直接在高维空间中计算直线距离具有误导性,因为高维空间巾的直线距离在低维嵌入流形上是不可达的(类似于从上海到纽约,三维空间最近的距离是穿过地心,但这是不可能的)。为了正确的度量低维流形上的距离,可利用流形在局部上与欧氏空间同胚这个性质,对每个点基于欧氏距离找出其近邻点,建立一个近邻连接图,并寻找最短路路径(由于同胚性质只在局部成立,因此一点的近邻连接图的建立应忽略其非近邻点)。在得到低维流形任意两点的距离后,可以使用如MDS方法来进行降维。
Isomap算法流程如下:
需注意的是, Isomap 仅是得到了训练样本在低维空间的坐标,对于新样本的降维,需要将训练样本的高维空间坐标作为输入、低维空间坐标作为输出,训练一个回归学习器来对新样本的低维空间坐标进行预测。(线性变换则可用正交投影,但一般高维投影到低维流形为非线性变换,因此一般使用回归器)
局部线性嵌入(LLE)
局部线性嵌入试图保持领域内样本之间的线性关系。
(证明过程很懵,挖坑挖坑,救命。。。)
ps:贴一个博客讲的不错。
度量学习
在机器学习中,对高维数据进行降维的主要目的是希望找一个合适的低维空间,在此空间中进行学习能比原始空间性能更好。事实上,每个空间对应了在样本属性上定义的一个距离度量,而寻找合适的空间,实质上就是在寻找一个合适的距离度量。度量学习尝试通过学习来找到这样一个合适的距离度量。
将不同样本间的距离定义为:
其中
d
i
s
t
i
j
,
k
{dist}_{ij,k}
distij,k表示
x
i
\boldsymbol{x_i}
xi与
x
j
\boldsymbol{x_j}
xj在第
k
k
k维上的距离。这里
W
\boldsymbol{W}
W是对角矩阵,这意味着坐标轴是正交的,各属性之间相互独立,但事实上他们往往是相关的。因此将
W
\boldsymbol{W}
W替换为半正定矩阵
M
=
P
P
T
\boldsymbol{M}=\boldsymbol{P}\boldsymbol{P^T}
M=PPT(距离非负,则二次型非负,M为半正定矩阵,可作特征值分解且特征值大于等于0,P为正交基构成的矩阵),得到马氏距离:
d
i
s
t
m
a
h
2
(
x
i
,
x
j
)
=
(
x
i
−
x
j
)
T
M
(
x
i
−
x
j
)
=
∥
x
i
−
x
j
∥
M
2
=
(
x
i
−
x
j
)
T
P
P
T
(
x
i
−
x
j
)
=
∥
P
T
x
i
−
P
T
x
j
∥
M
2
{dist}_{mah}^2(\boldsymbol{x_i},\boldsymbol{x_j})={(\boldsymbol{x_i}-\boldsymbol{x_j})}^T\boldsymbol{M}(\boldsymbol{x_i}-\boldsymbol{x_j})={\Vert \boldsymbol{x_i}-\boldsymbol{x_j}\Vert}^2_M={(\boldsymbol{x_i}-\boldsymbol{x_j})}^T\boldsymbol{P}\boldsymbol{P^T}(\boldsymbol{x_i}-\boldsymbol{x_j})={\Vert \boldsymbol{P^T}\boldsymbol{x_i}-\boldsymbol{P^T}\boldsymbol{x_j}\Vert}^2_M
distmah2(xi,xj)=(xi−xj)TM(xi−xj)=∥xi−xj∥M2=(xi−xj)TPPT(xi−xj)=∥PTxi−PTxj∥M2
其中
M
\boldsymbol{M}
M也称为度量矩阵,度量学习便是对
M
\boldsymbol{M}
M进行学习。相当于通过
P
T
\boldsymbol{P^T}
PT进行变换将
X
\boldsymbol{X}
X降维。
度量学习一个典型的例子是近邻成分分析(NCA)。