我们都知道机器学习算法的性能受到样本数据的特征维数的影响,特征维数越多,需要的训练数据也越大,机器学习算法所消耗的时间也越多,甚至成指数爆炸增长。同时过多的特征维数之间也可能存在相互关联的特征和一些噪声。因此,在训练机器学习算法之前,通常我们会对样本数据进行预处理,数据降维就是通常需要完成的一步。
线性判别分析(LDA)
线性判别分析属于有监督学习算法,也就是对于每一个给定的n维样本 x ( i ) ( x 1 ( i ) , x 2 ( i ) , . . . , x n ( i ) ) x^{(i)}(x^{(i)}_1,x^{(i)}_2,...,x^{(i)}_n) x(i)(x1(i),x2(i),...,xn(i))都有一个与之对应的期望值或者类别标签 y ( i ) y^{(i)} y(i)。LDA的思想非常朴素:将带上标签数据(点),通过投影(变换)的方法,投影更低维的空间。在这个低维空间中,同类样本尽可能接近,异类样本尽可能远离。
我们从最简单的二分类问题入手。假设原始样本的特征维数只有二维(
x
1
,
x
2
x_1,x_2
x1,x2),现在我们希望将二维特征用一维表示,也就是将二维平面上的点投影到一条直线上,如下图所示:
从上图可以看出,右边直线在数据降维后的效果要比左边直线更优,因为它更加满足降维后的同类数据尽可能接近,异类数据尽可能远离的目标。LDA算法的目标就是找到这么一条直线。
我们知道矩阵的本质是一个线性映射。因此对于二分类问题,原始二维平面点经过映射后的可以表示成:
y
=
w
T
x
y=w^Tx
y=wTx
其中 w w w为投影矩阵,当投影到一维直线时,这个矩阵退化为一个列向量; y y y表示 x x x投影到直线后的点到原点的距离。
欲使同类样本的投影点尽可能接近,可以让同类样本的投影点的协方差尽可能小;而欲使异类样本的投影点尽可能远离,可以让异类样本的类中心之间的距离尽可能大。令
μ
i
\mu_i
μi和
∑
i
\sum_i
∑i分别表示第
i
∈
{
0
,
1
}
i\in\{0,1\}
i∈{0,1}原始样本的均值向量和协方差矩阵。
投影后的类中心可以表示为:
1
N
i
∑
w
T
x
=
w
T
μ
i
\frac{1}{N_i}\sum w^Tx=w^T\mu_i
Ni1∑wTx=wTμi
投影后的协方差可以表示为:
(
w
T
x
i
−
w
T
μ
i
)
(
w
T
x
i
−
w
T
μ
i
)
T
=
w
T
(
x
i
−
μ
i
)
[
w
T
(
x
i
−
μ
i
)
]
T
=
w
T
(
x
i
−
μ
i
)
(
x
i
−
μ
i
)
T
w
=
w
T
∑
i
w
\begin{aligned} &(w^Tx_i-w^T\mu_i)(w^Tx_i-w^T\mu_i)^T\\ =& w^T(x_i-\mu_i)[w^T(x_i-\mu_i)]^T\\ =& w^T(x_i-\mu_i)(x_i-\mu_i)^Tw\\ =& w^T\sum_iw \end{aligned}
===(wTxi−wTμi)(wTxi−wTμi)TwT(xi−μi)[wT(xi−μi)]TwT(xi−μi)(xi−μi)TwwTi∑w
因此欲达到上述目的,等价于最大化目标
J
=
∣
∣
w
T
μ
0
−
w
T
μ
1
∣
∣
2
2
w
T
∑
0
w
+
w
T
∑
1
w
=
w
T
(
μ
0
−
μ
1
)
(
μ
0
−
μ
1
)
T
w
w
T
(
∑
0
+
∑
1
)
w
\begin{aligned} J=& \frac{||w^T\mu_0-w^T\mu_1||^2_2}{w^T\sum_0w+w^T\sum_1w}\\ =&\frac{w^T(\mu_0-\mu_1)(\mu_0-\mu_1)^Tw}{w^T(\sum_0+\sum_1)w} \end{aligned}
J==wT∑0w+wT∑1w∣∣wTμ0−wTμ1∣∣22wT(∑0+∑1)wwT(μ0−μ1)(μ0−μ1)Tw
定义“类内散度矩阵”
S
w
=
∑
0
+
∑
1
=
∑
x
∈
X
0
(
x
−
μ
0
)
(
x
−
μ
0
)
T
+
∑
x
∈
X
1
(
x
−
μ
1
)
(
x
−
μ
1
)
T
S_w={\sum}_0+{\sum}_1=\sum_{x\in X_0}(x-\mu_0)(x-\mu_0)^T+\sum_{x\in X_1}(x-\mu_1)(x-\mu_1)^T
Sw=∑0+∑1=x∈X0∑(x−μ0)(x−μ0)T+x∈X1∑(x−μ1)(x−μ1)T
定义“类间散度矩阵”
S
b
=
(
μ
0
−
μ
1
)
(
μ
0
−
μ
1
)
T
S_b=(\mu_0-\mu_1)(\mu_0-\mu_1)^T
Sb=(μ0−μ1)(μ0−μ1)T
则上面的目标函数可以重写为
J
=
w
T
S
b
w
w
T
S
w
w
J=\frac{w^TS_bw}{w^TS_ww}
J=wTSwwwTSbw
因为分子分母都是关于
w
w
w的二次型,若
w
w
w是一个解,则对任意常数
α
\alpha
α,
α
w
\alpha w
αw也是一个解。因此解与
w
w
w的长度无关,只与其方向有关。不妨令
w
T
S
w
w
=
1
w^TS_ww=1
wTSww=1,则最优化目标等价于
min
w
−
w
T
S
b
w
s
.
t
.
w
T
S
w
w
=
1
\begin{aligned} \min_w\quad& -w^TS_bw\\ s.t. \quad& w^TS_ww=1 \end{aligned}
wmins.t.−wTSbwwTSww=1
引入拉格朗日乘子,上式等价于
min
c
(
w
)
=
−
w
T
S
b
w
+
λ
(
w
T
S
w
w
−
1
)
\begin{aligned} &\min& c(w)=-w^TS_bw+\lambda(w^TS_ww-1) \end{aligned}
minc(w)=−wTSbw+λ(wTSww−1)
求导得
d
c
d
w
=
−
2
S
b
w
+
2
λ
S
w
w
\frac{dc}{dw}=-2S_bw+2\lambda S_ww
dwdc=−2Sbw+2λSww
令其等于0,得
S
b
w
=
λ
S
w
w
S_bw=\lambda S_ww
Sbw=λSww
如果
S
w
S_w
Sw可逆,等式两边同乘
S
w
−
1
S_w^{-1}
Sw−1有
S
w
−
1
S
b
w
=
λ
w
S_w^{-1}S_bw=\lambda w
Sw−1Sbw=λw
可喜的发现
w
w
w就是矩阵
S
w
−
1
S
b
S_w^{-1}S_b
Sw−1Sb的特征向量,因此求解问题转化成求矩阵特征值问题上了,首先求出
S
w
−
1
S
b
S_w^{-1}S_b
Sw−1Sb的特征值,然后取前K个特征向量按列组成
w
w
w矩阵即可。
可以将二分类任务推广到多分类任务中,这时不再是将样本点投影到一条直线上,而是投影到一个
d
d
d维超平面上。此时的基向量
(
w
1
,
w
2
,
.
.
.
,
w
d
)
(w_1,w_2,...,w_d)
(w1,w2,...,wd)按列构成了投影矩阵。假定存在C个类别,且第
i
i
i类样本数为
m
i
m_i
mi,前面二分类问题中定义的“类间散度矩阵”需要重新定义为每类样本中心相对于全局样本中心点的散列情况。
所以
S
b
S_b
Sb表示如下:
S
b
=
∑
i
=
1
C
m
i
(
μ
i
−
μ
)
(
μ
i
−
μ
)
T
S_b=\sum_{i=1}^C m_i(\mu_i-\mu)(\mu_i-\mu)^T
Sb=i=1∑Cmi(μi−μ)(μi−μ)T
“类内散度矩阵”的定义不变
S
w
=
∑
x
∈
X
i
(
x
−
μ
i
)
(
x
−
μ
i
)
T
S_w=\sum_{x\in X_i}(x-\mu_i)(x-\mu_i)^T
Sw=x∈Xi∑(x−μi)(x−μi)T
所以优化目标同样可以写成
max
W
W
T
S
b
W
W
T
S
w
W
\max_W \frac{W^TS_bW}{W^TS_wW}
WmaxWTSwWWTSbW
由于现在分子分母都是矩阵,要将矩阵变成实数,可以取矩阵的行列式或者矩阵的迹。其中,矩阵的行列式等于矩阵特征值之积,矩阵的迹等于矩阵特征值之和。所以优化目标可以转化为:
max
W
t
r
(
W
T
S
b
W
)
t
r
(
W
T
S
w
W
)
o
r
max
W
∣
W
T
S
b
W
∣
∣
W
T
S
w
W
∣
\max_W \frac{tr(W^TS_bW)}{tr(W^TS_wW)}\\ or\\ \max_W \frac{|W^TS_bW|}{|W^TS_wW|}
Wmaxtr(WTSwW)tr(WTSbW)orWmax∣WTSwW∣∣WTSbW∣
可以通过如下广义特征值求解:
S
b
W
=
λ
S
w
W
S_bW=\lambda S_wW
SbW=λSwW
W的解则是 S w − 1 S b S_w^{-1}S_b Sw−1Sb的N-1个最大广义特征值所对应的特征向量按列组成的矩阵。
总结LDA算法流程如下:
输入:样本数据集D=
{
x
i
,
y
i
}
i
=
1
m
\{x_i,y_i\}_{i=1}^m
{xi,yi}i=1m,
y
i
∈
{
C
1
,
C
2
,
.
.
.
,
C
K
}
y_i\in\{C_1,C_2,...,C_K\}
yi∈{C1,C2,...,CK}。降维到的维数
d
d
d。
输出:降维后的样本数据
- 计算类内散度矩阵 S w S_w Sw。
- 计算类间散度矩阵 S w S_w Sw。
- 计算矩阵 S w − 1 S b S_w^{-1}S_b Sw−1Sb。
- 计算矩阵 S w − 1 S b S_w^{-1}S_b Sw−1Sb最大的 d d d个特征值对应的特征向量,按列组成投影矩阵 W W W。
- 对样本集中的每一个样本 x i x_i xi计算投影后的坐标, z i = W T x i z_i=W^Tx_i zi=WTxi。
主成分分析(PCA)
主成分分析(PCA)是另一种常用的数据降维方法,它属于无监督学习算法,即在算法训练时,我们不需要知道样本对应的类别。
同样的,我们从将二维数据降维到一维入手。假设现在我们有五条样本数据如下(已经过均值化为0处理):
(
−
1
−
1
0
2
0
−
2
0
0
1
1
)
\left( \begin{matrix} -1 & -1 & 0 & 2 & 0\\ -2 & 0 & 0 & 1 & 1 \end{matrix} \right)
(−1−2−10002101)
将这五个点表示在二维坐标系下如图所示:
现在我们想将这五个点投影到一条直线上,可以看到无论是选择
x
x
x轴还是
y
y
y轴,都存在部分点投影后重合的情况,这不是我们想要的结果,因为这相当于损失了部分数据点的信息;如果选择过原点的一三象限对角线,投影后的五个点将不再会重合,这是我们想要的结果。总结来说,我们希望样本点在每一维上的投影点尽可能分散。这种分散程度可以用方差来度量。
现在考虑多维情形,首先我们选择投影后方差最大的方向为第一个方向,接下来要进行其他方向的选择,显然不能继续选取方差最大的方向,因为这样选择的方向必将几乎和第一个方向重合。想想降维的目标:在信息不丢失的情况下,尽可能去除一些存在相关性的字段,方差最大已经保证了尽可能保留原始信息,那怎样才能去除存在相关性的字段呢?反过来就是,我们希望降维后的各字段都不存在相关性,而协方差正是用来度量两个随机变量相关性的参数,协方差为0的两个随机变量称为不相关。
至此我们得到了PCA的目标:将一组
n
n
n维向量降为
k
k
k维(
0
<
k
<
n
0<k<n
0<k<n),其目标是选择
k
k
k个单位正交基,使得原始数据在变换到这组基上后,各字段两两协方差为0,而各字段的方差尽可能大。
那怎么用数学方法来表示我们的优化目标呢?设我们有
m
m
m个
n
n
n维样本数据(已经过均值化为0处理),将其按列排成
n
∗
m
n*m
n∗m的矩阵
X
X
X
X
=
(
a
1
a
2
a
3
a
4
a
5
b
1
b
2
b
3
b
4
b
5
)
X= \left( \begin{matrix} a_1 & a_2 & a_3 & a_4 & a_5\\ b_1 & b_2 & b_3 & b_4 & b_5 \end{matrix} \right)
X=(a1b1a2b2a3b3a4b4a5b5)
设
C
=
1
m
X
X
T
C=\frac {1}{m}XX^T
C=m1XXT
C
=
(
1
m
∑
i
=
1
m
a
i
2
1
m
∑
i
=
1
m
a
i
b
i
1
m
∑
i
=
1
m
b
i
a
i
1
m
∑
i
=
1
m
b
i
2
)
C= \left( \begin{matrix} \frac{1}{m}\sum_{i=1}^ma_i^2 & \frac{1}{m}\sum_{i=1}^ma_ib_i \\ \frac{1}{m}\sum_{i=1}^mb_ia_i & \frac{1}{m}\sum_{i=1}^mb_i^2 \end{matrix} \right)
C=(m1∑i=1mai2m1∑i=1mbiaim1∑i=1maibim1∑i=1mbi2)
可以发现C是一个对称矩阵,其对角线上的元素就是各字段的方差,第
i
i
i行
j
j
j列的元素和第
j
j
j行
i
i
i列的元素相同,表示
i
i
i和
j
j
j两个字段的协方差。现在我们可喜的发现,需要优化的目标已经统一到一个矩阵中,这个矩阵称为协方差矩阵。因此我们希望降维后的数据点的协方差矩阵是对角矩阵并取前
k
k
k大的。
设原始样本数据形成的矩阵为
X
X
X
则原始样本数据形成的协矩阵为
C
=
1
m
X
X
T
C=\frac {1}{m}XX^T
C=m1XXT
设
W
W
W是一组正交基
(
w
1
,
w
2
,
.
.
.
,
w
k
)
(w_1,w_2,...,w_k)
(w1,w2,...,wk)按列形成的矩阵
则降维后的数据点形成的矩阵为
Y
=
W
T
X
Y=W^TX
Y=WTX
则降维后的数据点形成的协矩阵为
D
=
1
m
Y
Y
T
=
1
m
W
T
X
(
W
T
X
)
T
=
1
m
W
T
X
X
T
W
=
W
T
C
W
\begin{aligned} D=&\frac{1}{m}YY^T\\ =&\frac{1}{m}W^TX(W^TX)^T\\ =&\frac{1}{m}W^TXX^TW\\ =&W^TCW \end{aligned}
D====m1YYTm1WTX(WTX)Tm1WTXXTWWTCW
因此,优化目标变为寻找一个矩阵
W
W
W,满足
W
T
C
W
W^TCW
WTCW是对角矩阵。
由上文知,原始数据矩阵的协方差矩阵
C
C
C是一个对称矩阵,因此具有如下两条性质:
- 实对称矩阵不同特征值对应的特征向量必然正交
- 设特征向量λ重数为r,则必然存在r个线性无关的特征向量对应λ,因此可以将这r个特征向量单位正交化
因此一个
n
n
n行
n
n
n列的实对称矩阵一定可以找到
n
n
n个单位正交特征向量,设这n个特征向量为
e
1
,
2
2
,
.
.
.
,
e
n
e_1,2_2,...,e_n
e1,22,...,en,将其按列组成矩阵:
E
=
(
e
1
,
2
2
,
.
.
.
,
e
n
)
E=(e_1,2_2,...,e_n)
E=(e1,22,...,en)
则对协方差矩阵
C
C
C有如下结论:
E T C E = Λ = ( λ 1 ⋱ λ n ) E^TCE=\Lambda= \left( \begin{matrix} \lambda_1 & &\\ & \ddots &\\ && \lambda_n \end{matrix} \right) ETCE=Λ=⎝⎛λ1⋱λn⎠⎞
所以我们要找的 W W W就是原始数据矩阵的协方差矩阵 C C C的前 K K K大的特征值对应的特征向量按列组成的矩阵。
PCA算法步骤总结如下:
- 将原始样本数据按列排成矩阵 X X X。
- 将 X X X的每一行(代表一个属性字段)进行0均值化处理。
- 求出协方差矩阵 C = 1 m X X T C=\frac {1}{m}XX^T C=m1XXT的特征值及对应的特征向量。
- 将特征向量对应特征值从大到小按列排列,取前 k k k列组成矩阵 W W W。
- Y = W T X Y=W^TX Y=WTX即为降维后的数据。