1 PCA目的/作用
主成分分析算法(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数据维度,同时保留住较多的原数据点的特性。
PCA降维的目的,就是为了在尽量保证“信息量不丢失”的情况下,对原始特征进行降维,也就是尽可能将原始特征往具有最大投影信息量的维度上进行投影。将原特征投影到这些维度上,使降维后信息量损失最小。
2 求解步骤
去除平均值
计算协方差矩阵
计算协方差矩阵的特征值和特征向量
将特征值排序
保留前N个最大的特征值对应的特征向量
将原始特征转换到上面得到的N个特征向量构建的新空间中(最后两步,实现了特征压缩)
假设有
M
M
M个样本
{
X
1
,
X
2
,
.
.
.
,
X
M
}
\{ X^1 ,X^2,...,X^M \}
{X1,X2,...,XM},每个样本有
N
N
N维特征
X
i
=
(
x
1
i
,
x
2
i
,
.
.
.
,
x
N
i
)
T
X^i =(x^i_1, x^i_2, ... , x^i_N)^T
Xi=(x1i,x2i,...,xNi)T,每一个特征
x
j
x_j
xj都有各自的特征值。以下面的数据为例
第一步:对所有特征进行中心化:去均值(这步很重要,之后会解释)
求每一个特征的平均值,然后对于所有的样本,每一个特征都减去自身的均值。
特征 x 1 x_1 x1的平均值 : x 1 ‾ = 1 M ∑ i = 1 M x 1 i = 1 + 2 + 2.5 + 0.3 + 6 + . . . + 0.5 10 = 2.31 \overline{x_1}=\frac{1}{M}\sum_{i=1}^M{x_1^i}=\frac{1+2+2.5+0.3+6+...+0.5}{10}=2.31 x1=M1∑i=1Mx1i=101+2+2.5+0.3+6+...+0.5=2.31
特征
x
2
x_2
x2的平均值 :
x
2
‾
=
1
M
∑
i
=
1
M
x
2
i
=
32
+
45
+
7
+
.
.
.
+
10
10
=
20.1
\overline{x_2}=\frac{1}{M}\sum_{i=1}^M{x_2^i}=\frac{32+45+7+...+10}{10}=20.1
x2=M1∑i=1Mx2i=1032+45+7+...+10=20.1
经过去均值处理之后,原始特征的值就变成了新的值,在这个新的norm_data的基础上,进行下面的操作。
第二步:求协方差矩阵C
C
=
[
c
o
v
(
x
1
,
x
1
)
c
o
v
(
x
1
,
x
2
)
c
o
v
(
x
2
,
x
1
)
c
o
v
(
x
2
,
x
2
)
]
C=\begin{bmatrix} cov(x_1,x_1)&cov(x_1,x_2)\\ cov(x_2,x_1)&cov(x_2,x_2)\\ \end{bmatrix}
C=[cov(x1,x1)cov(x2,x1)cov(x1,x2)cov(x2,x2)]
上述矩阵中,对角线上分别是特征
x
1
和
x
2
x_1和x_2
x1和x2的方差,非对角线上是协方差。协方差大于0表示
x
1
和
x
2
x_1和x_2
x1和x2若有一个增,另一个也增;小于0表示一个增,一个减;协方差为0时,两者独立。协方差绝对值越大,两者对彼此的影响越大,反之越小。其中,
c
o
v
(
x
1
,
x
1
)
cov(x_1,x_1)
cov(x1,x1)的求解公式如下,其他类似
c
o
v
(
x
1
,
x
1
)
=
∑
i
=
1
M
(
x
1
i
−
x
1
‾
)
(
x
1
i
−
x
1
‾
)
M
−
1
cov(x_1,x_1)=\frac{\sum_{i=1}^M{(x_1^i-\overline{x_1}})(x_1^i-\overline{x_1})}{M-1}
cov(x1,x1)=M−1∑i=1M(x1i−x1)(x1i−x1)
根据上面的协方差计算公式我们就得到了这
M
M
M个样本在这
N
N
N维特征下的协方差矩阵C。ps:之所以除以M-1而不是除以M,是因为这样能使我们以较小的样本集更好的逼近总体的标准差,即统计上所谓的“无偏估计”。具体推导过程可以参见博文:
样本方差的无偏估计与(n-1)的由来
第三步:求协方差矩阵C的特征值和相对应的特征向量
利用矩阵的知识,求协方差矩阵
C
C
C 的特征值
λ
\lambda
λ 和相对应的特征向量
u
u
u(每一个特征值对应一个特征向量):
C
u
=
λ
u
Cu=\lambda u
Cu=λu
特征值
λ
\lambda
λ 会有
N
N
N个,每一个
λ
i
\lambda_i
λi 对应一个特征向量
u
i
u_i
ui ,将特征值
λ
\lambda
λ 按照从大到小的顺序排序,选择最大的前k个
,并将其相对应的k个特征向量拿出来,我们会得到一组
{
(
λ
1
,
u
1
)
,
(
λ
2
,
u
2
)
,
.
.
.
,
(
λ
k
,
u
k
)
}
\{(\lambda_1,u_1),(\lambda_2,u_2),...,(\lambda_k,u_k)\}
{(λ1,u1),(λ2,u2),...,(λk,uk)}。本例中原始特征只有2维,我在选取
λ
\lambda
λ 的时候,令
k
=
1
k=1
k=1,选择最大的
λ
1
和
其
对
应
的
u
1
\lambda_1和其对应的u_1
λ1和其对应的u1。
第四步:将原始特征投影到选取的特征向量上,得到降维后的新K维特征
这个选取最大的前k个特征值和相对应的特征向量,并进行投影的过程,就是降维的过程
。对于每一个样本
X
i
X^i
Xi,原来的特征是
(
x
1
i
,
x
2
i
,
.
.
.
,
x
n
i
)
T
(x^i_1,x^i_2,...,x^i_n)^T
(x1i,x2i,...,xni)T,投影之后的新特征是
(
y
1
i
,
y
2
i
,
.
.
.
,
y
k
i
)
T
(y_1^i,y_2^i,...,y_k^i)^T
(y1i,y2i,...,yki)T ,新特征的计算公式如下:
[
y
1
i
y
2
i
.
.
.
y
k
i
]
=
[
u
1
T
.
(
x
1
i
,
x
2
i
,
.
.
.
,
x
n
i
)
T
u
2
T
.
(
x
1
i
,
x
2
i
,
.
.
.
,
x
n
i
)
T
.
.
.
u
k
T
.
(
x
1
i
,
x
2
i
,
.
.
.
,
x
n
i
)
]
\begin{bmatrix} y_1^i\\ y_2^i\\ .\\ .\\ .\\ y_k^i\\ \end{bmatrix}=\begin{bmatrix} u_1^T . (x^i_1, x^i_2,...,x^i_n)^T\\ u_2^T . (x^i_1, x^i_2,...,x^i_n)^T\\ .\\ .\\ .\\ u_k^T . (x^i_1, x^i_2,...,x^i_n)\\ \end{bmatrix}
⎣⎢⎢⎢⎢⎢⎢⎡y1iy2i...yki⎦⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎢⎡u1T.(x1i,x2i,...,xni)Tu2T.(x1i,x2i,...,xni)T...ukT.(x1i,x2i,...,xni)⎦⎥⎥⎥⎥⎥⎥⎤
对于我们的例子来说,每一个样本 X i X^i Xi,由原来的 X i = ( x 1 i , x 2 i ) T X^i =(x^i_1, x^i_2)^T Xi=(x1i,x2i)T变成了现在 X i = y 1 i X^i =y^i_1 Xi=y1i,达到了降维的目的。
3 原理分析
3.1 为什么样本在“协方差矩阵C的最大K个特征值所对应的特征向量”上的投影就是k维理想特征?
其中一种解释是: 最大方差理论:方差越大,信息量就越大。协方差矩阵的每一个特征向量就是一个投影面,每一个特征向量所对应的特征值就是原始特征投影到这个投影面之后的方差。由于投影过去之后,我们要尽可能保证信息不丢失,所以要选择具有较大方差的投影面对原始特征进行投影,也就是选择具有较大特征值的特征向量。然后将原始特征投影在这些特征向量上,投影后的值就是新的特征值。每一个投影面生成一个新的特征,k个投影面就生成k个新特征。
PCA降维的目的,就是为了在尽量保证“信息量不丢失”的情况下,对原始特征进行降维,也就是尽可能将原始特征往具有最大信息量的维度上进行投影。将原特征投影到这些维度上,使降维后信息量损失最小。
3.2 那为什么协方差矩阵
的特征向量可以看做是投影面,相对应的特征值是原始特征投影到这个投影面之后的方差??
现在,假设有以下几个样本,特征只有2个维度。做完预处理(减去了均值,这步很重要,之后会解释)之后,分布如下:
现在将这些样本往低维空间进行投影,二维特征降维的话就是往一维降,投影直线有很多,比如下面的
u
1
和
u
2
u_1和u_2
u1和u2,选哪一条比较好呢?
根据方差最大理论,选择投影过去之后,样本方差最大的那条投影直线作为投影维度,对原始特征进行降维。经过计算,
u
1
u_1
u1比较好,因为投影后的样本点之间方差最大。
那么,投影过去之后样本之间的方差怎么计算?
以一个样本
X
i
X^i
Xi为例,蓝色点表示该样本,原始特征有2维,绿色点表示样本在u上的投影,u是该投影直线的单位向量。那么该样本的原二维特征
x
i
=
(
x
1
,
x
2
)
T
x^i=(x_1,x_2)^T
xi=(x1,x2)T投影到这个投影直线上就变成了一维特征(从二维坐标系变到了一维坐标系
u
u
u上),这个一维特征的值 = 投影点到原点的距离:
x
i
T
u
{x^i}^Tu
xiTu(根据向量的计算公式得到)。
同理,其他的样本投影到该投影直线上,生成的新的一维特征也这么计算。那么,投影之后的所有样本之间的方差
就等于(根据方差的定义):
方
差
=
1
M
∑
i
=
1
M
(
x
i
T
u
−
所
有
x
i
T
u
的
均
值
)
2
=
1
M
∑
i
=
1
M
(
x
i
T
u
)
2
(
式
1
)
方差=\frac{1}{M}\sum_{i=1}^M{({x^i}^Tu-所有{x^i}^Tu的均值)^2}=\frac{1}{M}\sum_{i=1}^M{({x^i}^Tu)^2} (式1)
方差=M1i=1∑M(xiTu−所有xiTu的均值)2=M1i=1∑M(xiTu)2(式1)
由于这些样本原特征的每一维特征在最一开始都进行了去均值操作,所以
x
i
x^i
xi每一维特征的均值都为0,因此投影到u上的特征的均值仍然是0(
所
有
x
i
T
u
的
均
值
所有{x^i}^Tu的均值
所有xiTu的均值=0)。对上式进行变换
方
差
=
1
M
∑
i
=
1
M
(
x
i
T
u
)
2
=
1
M
∑
i
=
1
M
u
T
x
i
x
i
T
u
=
u
T
(
1
M
∑
i
=
1
M
x
i
x
i
T
)
u
(
式
2
)
方差=\frac{1}{M}\sum_{i=1}^M{({x^i}^Tu)^2}=\frac{1}{M}\sum_{i=1}^M{{u^Tx^ix^i}^Tu}=u^T (\frac{1}{M}\sum_{i=1}^M{{x^ix^i}^T})u (式2)
方差=M1i=1∑M(xiTu)2=M1i=1∑MuTxixiTu=uT(M1i=1∑MxixiT)u(式2)
那么怎么求这个方差的最大值呢?我们发现,
1
M
∑
i
=
1
M
x
i
x
i
T
\frac{1}{M}\sum_{i=1}^M{{x^ix^i}^T}
M1∑i=1MxixiT是一个方形矩阵,我们可以从矩阵的角度求解
,令方差
1
M
∑
i
=
1
M
(
x
i
T
u
)
2
=
λ
\frac{1}{M}\sum_{i=1}^M{({x^i}^Tu)^2}=\lambda
M1∑i=1M(xiTu)2=λ,
C
=
1
M
∑
i
=
1
M
x
i
x
i
T
C=\frac{1}{M}\sum_{i=1}^M{{x^ix^i}^T}
C=M1∑i=1MxixiT,上式就变成了
λ
=
u
T
C
u
\lambda=u^TCu
λ=uTCu
由于
u
u
u是单位向量,
u
T
u
=
1
u^Tu=1
uTu=1,上式两边左乘
u
u
u得,
C
u
=
λ
u
Cu=\lambda u
Cu=λu
方差
λ
\lambda
λ就是方阵
C
C
C的特征值,
u
u
u是特征向量。一个矩阵的特征值
λ
\lambda
λ根据矩阵运算很容易求得。所以求解
λ
\lambda
λ的关键就是构造出矩阵C,我们把矩阵
C
=
1
M
∑
i
=
1
M
x
i
x
i
T
C=\frac{1}{M}\sum_{i=1}^M{{x^ix^i}^T}
C=M1∑i=1MxixiT展开,把
x
i
=
(
x
1
i
,
x
2
i
)
T
x^i=(x^i_1,x^i_2)^T
xi=(x1i,x2i)T带进去,
C
=
1
M
∑
i
=
1
M
x
i
x
i
T
=
1
M
∑
i
=
1
M
(
x
1
i
x
2
i
)
(
x
1
i
x
2
i
)
C=\frac{1}{M}\sum_{i=1}^M{{x^ix^i}^T}=\frac{1}{M}\sum_{i=1}^M{\begin{pmatrix}x_1^i\\x_2^i\\\end{pmatrix} \begin{pmatrix}x_1^i &x_2^i\\\end{pmatrix}}
C=M1i=1∑MxixiT=M1i=1∑M(x1ix2i)(x1ix2i)
=
1
M
∑
i
=
1
M
(
x
1
i
x
1
i
x
1
i
x
2
i
x
2
i
x
1
i
x
2
i
x
2
i
)
=
(
∑
i
=
1
M
(
x
1
i
−
0
)
(
x
1
i
−
0
)
M
∑
i
=
1
M
(
x
1
i
−
0
)
(
x
2
i
−
0
)
M
∑
i
=
1
M
(
x
2
i
−
0
)
(
x
1
i
−
0
)
M
∑
i
=
1
M
(
x
2
i
−
0
)
(
x
2
i
−
0
)
M
)
=\frac{1}{M}\sum_{i=1}^M{\begin{pmatrix}x_1^ix_1^i & x_1^ix_2^i\\ x_2^ix_1^i & x_2^ix_2^i\\ \end{pmatrix}}= \begin{pmatrix} \frac{\sum_{i=1}^M{(x_1^i-0)(x_1^i-0)}}{M} & \frac{\sum_{i=1}^M{(x_1^i-0)(x_2^i-0)}}{M} \\ \frac{\sum_{i=1}^M{(x_2^i-0)(x_1^i-0)}}{M} & \frac{\sum_{i=1}^M{(x_2^i-0)(x_2^i-0)}}{M} \end{pmatrix}
=M1i=1∑M(x1ix1ix2ix1ix1ix2ix2ix2i)=(M∑i=1M(x1i−0)(x1i−0)M∑i=1M(x2i−0)(x1i−0)M∑i=1M(x1i−0)(x2i−0)M∑i=1M(x2i−0)(x2i−0))
由于
x
1
和
x
2
x_1和x_2
x1和x2在最一开始,做了去均值处理,所以
x
1
‾
=
0
,
x
2
‾
=
0
\overline{x_1}=0,\overline{x_2}=0
x1=0,x2=0,所以上述矩阵就是一个协方差矩阵!!
这样,我们就求出了多个 λ \lambda λ(方差)以及与之相对应的多条投影直线 u u u!!!最佳的投影直线是最大的 λ 1 \lambda_1 λ1对应的特征向量 u 1 u_1 u1(拥有最大投影方差),其次是第二大的 λ 2 \lambda_2 λ2对应的特征向量 u 2 u_2 u2(拥有次大投影方差),依次类推。通过选取拥有最大前k个 λ \lambda λ的 u u u,对原始特征进行投影,使得原始特征被降维,并且尽可能保证最大的信息量。
至此,我们再返回去看PCA的求解步骤,就能明白我们为什么要,求解原样本特征的协方差矩阵的特征值和特征向量了。
3.3 为什么在计算协方差矩阵之前,要将样本的原始特征 x 1 , x 2 x_1,x_2 x1,x2进行去均值操作?
在上面的推导过程中,式1之所以成立, C = 1 M ∑ i = 1 M x i x i T C=\frac{1}{M}\sum_{i=1}^M{{x^ix^i}^T} C=M1∑i=1MxixiT之所以能看成一个协方差矩阵,一个前提就是 x 1 和 x 2 x_1和x_2 x1和x2的均值必须是0!否则上面的推导就不成立。
减去均值(中心化)这一步,并不是独立于 PCA 的预处理步骤,而是由 PCA 的定义所规定的必须步骤。
4 PCA优缺点
优点:
1、以方差衡量信息的无监督学习,不受样本标签限制。
2、由于协方差矩阵对称,因此k个特征向量之间两两正交,也就是各主成分之间正交,正交就肯定线性不相关,可消除原始数据成分间的相互影响
3. 可减少指标选择的工作量
4.用少数指标代替多数指标,利用PCA降维是最常用的算法
5. 计算方法简单,易于在计算机上实现。
缺点:
1、主成分解释其含义往往具有一定的模糊性,不如原始样本完整
2、贡献率小的主成分往往可能含有对样本差异的重要信息,也就是可能对于区分样本的类别(标签)更有用
3、特征值矩阵的正交向量空间是否唯一有待讨论
4、无监督学习
5 参考文献
【1】一篇深入剖析PCA的好文
【2】机器学习实战之PCA
【3】如何理解“方差越大信息量就越多”?