机器学习——降维
降维的思路来源于维度灾难的问题,我们知道n维球的体积为:
C R n CR^n CRn
那么在求体积与边长为 2 R 2R 2R的超立方体比值为:
lim n → 0 C R n 2 n R n = 0 \lim\limits_{n\rightarrow0}\frac{CR^n}{2^nR^n}=0 n→0lim2nRnCRn=0
这就是所谓的维度灾难,在高维数据中,主要样本都分布在立方体的边缘,所以数据集更加稀疏。(因为,维度越高的球,靠近边缘的空间越大,如果数据符合均匀分布的话)
维度的算法分为:
- 直接降维,特征选择
- 线性降维,PCA,MDS等
- 分线性,流行包括lsomap,LLE
为了方便,我们首先将协方差矩阵写成中心化的形式:
S = 1 N ∑ i = 1 N ( x i − x ‾ ) ( x i − x ‾ ) T = 1 N ( x 1 − x ‾ , x 2 − x ‾ , ⋯ , x N − x ‾ ) ( x 1 − x ‾ , x 2 − x ‾ , ⋯ , x N − x ‾ ) T = 1 N ( X T − 1 N X T I N 1 I N 1 T ) ( X T − 1 N X T I N 1 I N 1 T ) T = 1 N X T ( E N − 1 N I N 1 I 1 N ) ( E N − 1 N I N 1 I 1 N ) T X = 1 N X T H N H N T X = 1 N X T H N H N X = 1 N X T H X S=\frac{1}{N}\sum\limits_{i=1}^N(x_i-\overline{x})(x_i-\overline{x})^T\\ =\frac{1}{N}(x_1-\overline{x},x_2-\overline{x},\cdots,x_N-\overline{x})(x_1-\overline{x},x_2-\overline{x},\cdots,x_N-\overline{x})^T\\ =\frac{1}{N}(X^T-\frac{1}{N}X^T\mathbb{I}_{N1}\mathbb{I}_{N1}^T)(X^T-\frac{1}{N}X^T\mathbb{I}_{N1}\mathbb{I}_{N1}^T)^T\\ =\frac{1}{N}X^T(E_N-\frac{1}{N}\mathbb{I}_{N1}\mathbb{I}_{1N})(E_N-\frac{1}{N}\mathbb{I}_{N1}\mathbb{I}_{1N})^TX\\ =\frac{1}{N}X^TH_NH_N^TX\\ =\frac{1}{N}X^TH_NH_NX=\frac{1}{N}X^THX S=N1i=1∑N(xi−x)(xi−x)T=N1(x1−x,x2−x,⋯,xN−x)(x1−x,x2−x,⋯,xN−x)T=N1(XT−N1XTIN1IN1T)(XT−N1XTIN1IN1T)T=N1XT(EN−N1IN1I1N)(EN−N1IN1I1N)TX=N1XTHNHNTX=N1XTHNHNX=N1XTHX
这个式子利用了中心矩阵H的对称性,这也是一个投影矩阵。
线性降维-主成分分析PCA
损失函数
主成分分析中,我们的基本型想法是将所有数据投影到一个子空间中,从而达到降维的目标,为了寻找这个子空间,我们基本想法是:
- 所有数据在子空间中更为分散
- 损失的信息最小,即:在补空间的分量少
原来的数据很有可能各个维度之间是相关的,于是我们希望找到一组p个新的线性无关的单位基 μ i \mu_i μi,降维就是取其中的q个基。于是对于一个样本 x i x_i xi,经过这个坐标变换后:
x i ^ = ∑ i = 1 p ( u i T x i ) u i = ∑ i = 1 q ( u i T x i ) u i + ∑ i = q + 1 p ( u i T x i ) u i \hat{x_i}=\sum\limits_{i=1}^p(u_i^Tx_i)u_i=\sum\limits_{i=1}^q(u_i^Tx_i)u_i+\sum\limits_{i=q+1}^p(u_i^Tx_i)u_i xi^=i=1∑p(uiTxi)ui=i=1∑q(uiTxi)ui+i=q+1∑p(uiTxi)ui
对于数据集来说,我们首先将其中心化然后再去上面的式子的第一项,并使用其系数的平方平均作为损失函数并最大化:
J = 1 N ∑ i = 1 N ∑ j = 1 q ( ( x i − x ‾ ) T u j ) 2 = ∑ j = 1 q u j T S u j , s . t . u j T u j = 1 J=\frac{1}{N}\sum\limits_{i=1}^N\sum\limits_{j=1}^q((x_i-\overline{x})^Tu_j)^2\\ =\sum\limits_{j=1}^qu_j^TSu_j\ ,\ s.t.\ u_j^Tu_j=1 J=N1i=1∑Nj=1∑q((xi−x)Tuj)2=j=1∑qujTSuj , s.t. ujTuj=1
由于每个基都是线性无关的,于是每一个 μ j \mu_j μj的求解可以分别进行,使用拉个朗日乘子法:
a r g m a x u j L ( u j , λ ) = a r g m a x u j u j T S u j + λ ( 1 − u j T u j ) \mathop{argmax}_{u_j}L(u_j,\lambda)=\mathop{argmax}_{u_j}u_j^TSu_j+\lambda(1-u_j^Tu_j) argmaxujL(uj,λ)=argmaxujujTSuj+λ(1−ujTuj)
于是:
S μ j = λ μ j S\mu_j=\lambda\mu_j Sμj=λμj
可见,我们需要的基就是协方差矩阵的特征向量。损失函数最大取在本征值前q个最大值。
SVD与PCoA
下面使用实际训练时常常使用的SVD直接求得这个q个本征矢。
对中心化后的数据集进行奇异值分解:
H
X
=
U
Σ
V
T
,
U
T
U
=
E
N
,
V
T
V
=
E
p
,
Σ
:
N
×
P
HX=U\Sigma{V^T},U^TU=E_N,V^TV=E_p,\Sigma:N\times{P}
HX=UΣVT,UTU=EN,VTV=Ep,Σ:N×P
于是:
S
=
1
N
X
T
H
X
=
1
N
X
T
H
T
H
X
=
1
N
V
Σ
T
Σ
V
T
S=\frac{1}{N}X^THX=\frac{1}{N}X^TH^THX=\frac{1}{N}V\Sigma^T\Sigma{V^T}
S=N1XTHX=N1XTHTHX=N1VΣTΣVT
因此,我们直接对中心化后的数据集进行SVD,就可以得到特征值和特征向量V,在新坐标系中的坐标就是:
H
X
.
V
HX.V
HX.V
由上面的推导,我们也可以得到另一种方法PCoA主坐标分析,定义并进行特征值分解:
T
=
H
X
X
T
H
=
U
Σ
Σ
T
U
T
T=HXX^TH=U\Sigma\Sigma^TU^T
T=HXXTH=UΣΣTUT
由于:
T
U
Σ
=
U
Σ
(
Σ
T
Σ
)
TU\Sigma=U\Sigma(\Sigma^T\Sigma)
TUΣ=UΣ(ΣTΣ)
于是可以直接得到坐标。这两种方法都可以得到主成分,但是由于方差矩阵是
p
×
p
p\times{p}
p×p的,而T是
N
×
N
N\times{N}
N×N的,所以对样本量较少的时候可以采用PCoA的方法。
p-PCA
下面从概率的角度对PCA进行分析,概率方法也叫p-PCA。我们使用线性模型,类似之前LDA,我们选定一个方向,对原数据
x
∈
R
p
x\in\mathbb{R}^p
x∈Rp ,降维后的数据为
z
∈
R
q
,
q
<
p
z\in\mathbb{R}^q,q<p
z∈Rq,q<p。降维通过一个矩阵变换(投影)进行:
z
∼
N
(
O
q
1
,
I
q
q
)
x
=
W
z
+
μ
+
ε
ε
∼
N
(
0
,
σ
2
I
p
p
)
z\sim\mathcal{N}(\mathbb{O}_{q1},\mathbb{I}_{qq})\\ x=Wz+\mu+\varepsilon\\ \varepsilon\sim\mathcal{N}(0,\sigma^2\mathbb{I}_{pp})
z∼N(Oq1,Iqq)x=Wz+μ+εε∼N(0,σ2Ipp)
对于这个模型,我们可以使用期望-最大(EM)的算法进行学习,在进行推断的时候需要求得
p
(
z
∣
x
)
p(z|x)
p(z∣x),推断的求解过程和线性高斯模型类型。
p
(
z
∣
x
)
=
p
(
x
∣
z
)
p
(
z
)
p
(
x
)
E
[
x
]
=
E
[
W
z
+
μ
+
ε
]
=
μ
V
a
r
[
x
]
=
W
W
T
+
σ
2
I
p
p
⟹
p
(
z
∣
x
)
=
N
(
W
T
(
W
W
T
+
σ
2
I
)
−
1
(
x
−
μ
)
,
I
−
W
T
(
W
W
T
+
σ
2
I
)
−
1
W
)
p(z|x)=\frac{p(x|z)p(z)}{p(x)}\\ \mathbb{E}[x]=\mathbb{E}[Wz+\mu+\varepsilon]=\mu\\ Var[x]=WW^T+\sigma^2\mathbb{I}_{pp}\\ \Longrightarrow p(z|x)=\mathcal{N}(W^T(WW^T+\sigma^2\mathbb{I})^{-1}(x-\mu),\mathbb{I}-W^T(WW^T+\sigma^2\mathbb{I})^{-1}W)
p(z∣x)=p(x)p(x∣z)p(z)E[x]=E[Wz+μ+ε]=μVar[x]=WWT+σ2Ipp⟹p(z∣x)=N(WT(WWT+σ2I)−1(x−μ),I−WT(WWT+σ2I)−1W)
小结
在PCA中,我们只要直接对数据矩阵进行中心化然后求奇异值分解或者对数据的协方差矩阵进行分解就可以得到其主要维度。非线性学习的方法如流形学习将投影面从平面改为超曲面。