主成分分析(PCA)原理及推导
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/42264479
什么是PCA?
在数据挖掘或者图像处理等领域经常会用到主成分分析,这样做的好处是使要分析的数据的维度降低了,但是数据的主要信息还能保留下来,并且,这些变换后的维两两不相关!至于为什么?那就接着往下看。在本文中,将会很详细的解答这些问题:PCA、SVD、特征值、奇异值、特征向量这些关键词是怎么联系到一起的?又是如何在一个矩阵上体现出来?它们如何决定着一个矩阵的性质?能不能用一种直观又容易理解的方式描述出来?
数据降维
为了说明什么是数据的主成分,先从数据降维说起。数据降维是怎么回事儿?假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用三个维度,而事实上,这些点的分布仅仅是在一个二维的平面上,那么,问题出在哪里?如果你再仔细想想,能不能把x,y,z坐标系旋转一下,使数据所在平面与x,y平面重合?这就对了!如果把旋转后的坐标系记为x’,y’,z’,那么这组数据的表示只用x’和y’两个维度表示即可!当然了,如果想恢复原来的表示方式,那就得把这两个坐标之间的变换矩阵存下来。这样就能把数据维度降下来了!但是,我们要看到这个过程的本质,如果把这些数据按行或者按列排成一个矩阵,那么这个矩阵的秩就是2!这些数据之间是有相关性的,这些数据构成的过原点的向量的最大线性无关组包含2个向量,这就是为什么一开始就假设平面过原点的原因!那么如果平面不过原点呢?这就是数据中心化的缘故!将坐标原点平移到数据中心,这样原本不相关的数据在这个新坐标系中就有相关性了!有趣的是,三点一定共面,也就是说三维空间中任意三点中心化后都是线性相关的,一般来讲n维空间中的n个点一定能在一个n-1维子空间中分析!所以,不要说数据不相关,那是因为坐标没选对!
上面这个例子里把数据降维后并没有丢弃任何东西,因为这些数据在平面以外的第三个维度的分量都为0。现在,我假设这些数据在z’轴有一个很小的抖动,那么我们仍然用上述的二维表示这些数据,理由是我认为这两个轴的信息是数据的主成分,而这些信息对于我们的分析已经足够了,z’轴上的抖动很有可能是噪声,也就是说本来这组数据是有相关性的,噪声的引入,导致了数据不完全相关,但是,这些数据在z’轴上的分布与原点构成的夹角非常小,也就是说在z’轴上有很大的相关性,综合这些考虑,就可以认为数据在x’,y’轴上的投影构成了数据的主成分!
现在,关于什么是数据的主成分已经很好的回答了。下面来看一个更具体的例子。
下面是一些学生的成绩:
学生 | 语文 | 数学 | 物理 | 化学 |
---|---|---|---|---|
1 | 90 | 140 | 99 | 100 |
2 | 90 | 90 | 89 | 100 |
3 | 90 | 100 | 79 | 100 |
…… | …… | …… | …… | …… |
首先,假设这些科目成绩不相关,也就是说某一科考多少份与其他科没有关系。那么一眼就能看出来,数学、物理、化学这三门成绩构成了这组数据的主成分(很显然,数学作为第一主成分,因为数学成绩拉的最开)。为什么一眼能看出来?因为坐标轴选对了!下面再看一组数据,还能不能一眼看出来:
学生代码 | 数学 | 物理 | 化学 | 语文 | 历史 | 英语 |
---|---|---|---|---|---|---|
1 | 65 | 61 | 72 | 84 | 81 | 79 |
2 | 77 | 77 | 76 | 64 | 70 | 55 |
3 | 67 | 63 | 49 | 65 | 67 | 57 |
4 | 80 | 69 | 75 | 74 | 74 | 63 |
5 | 74 | 70 | 80 | 84 | 81 | 74 |
6 | 78 | 84 | 75 | 62 | 71 | 64 |
7 | 66 | 71 | 67 | 52 | 65 | 57 |
8 | 77 | 71 | 57 | 72 | 86 | 71 |
9 | 83 | 100 | 79 | 41 | 67 | 50 |
…… | …… | …… | …… | …… | …… | …… |
是不是有点凌乱了?你还能看出来数据的主成分吗?显然不能,因为在这坐标系下数据分布很散乱。所以说,看到事物的表象而看不到其本质,是因为看的角度有问题!如果把这些数据在空间中画出来,也许你一眼就能看出来。但是,对于高维数据,能想象其分布吗?就算能描述分布,如何精确地找到这些主成分的轴?如何衡量你提取的主成分到底占了整个数据的多少信息?要回答这些问题,需要将上面的分析上升到理论层面。接下来就是PCA的理论分析。
PCA推导
以下面这幅图开始我们的推导:
上面是二维空间中的一组数据,很明显,数据的分布让我们很容易就能看出来主成分的轴(简称主轴)的大致方向。下面的问题就是如何通过数学计算找出主轴的方向。来看这张图:
现在要做的事情就是寻找u1的方向,对于这点,我想好多人都有经验,这不就是以前用最小二乘法拟合数据时做的事情吗!对,最小二乘法求出来的直线(二维)的方向就是u1的方向!那u2的方向呢?因为这里是二维情况,所以u2方向就是跟u1垂直的方向,对于高维数据,怎么知道u2的方向?经过下面的理论推导,各个主轴都能确定下来。
给定一组数据:(如无说明,以下推导中出现的向量都是默认是列向量)
z 1 ⃗ , z 2 ⃗ , z 3 ⃗ , ⋯   , z n ⃗ {\vec{z_1},\vec{z_2},\vec{z_3},\cdots,\vec{z_n}} z1,z2,z3,⋯,zn
将其中心化后表示为:
x 1 ⃗ , x 2 ⃗ , x 3 ⃗ , ⋯   , x n ⃗ , = z 1 ⃗ − μ ⃗ , z 2 ⃗ − μ ⃗ , ⋯   , z n ⃗ − μ ⃗ {\vec{x_1},\vec{x_2},\vec{x_3},\cdots,\vec{x_n},} = {\vec{z_1}-\vec{\mu},\vec{z_2}-\vec{\mu},\cdots,\vec{z_n}-\vec{\mu}} x1,x2,x3,⋯,xn,=z1−μ,z2−μ,⋯,zn−μ
μ ⃗ = 1 n ∑ i = 1 n z i ⃗ \vec{\mu} =\frac{1}{n}\sum_{i=1}^n \vec{z_i} μ=n1i=1∑nzi
中心化后的数据在第一主轴u1方向上分布散的最开,也就是说在u1方向上的投影的绝对值之和最大(也可以说方差最大),计算投影的方法就是将x与u1做内积,由于只需要求u1的方向,所以设u1是单位向量。
也就是最大化下式:
1 n ∑ i = 1 n z i ⃗ \frac{1}{n}\sum_{i=1}^n \vec{z_i} n1i=1∑nzi
也就是最大化下式:
1 n ∑ i = 1 n ∣ x i ⃗ ⋅ μ 1 ⃗ ∣ \frac{1}{n}\sum_{i=1}^n |\vec{x_i}\cdot\vec{\mu_1}| n1i=1∑n∣xi⋅μ1∣
即最大化:
1 n ∑ i = 1 n ∣ x i ⃗ ⋅ μ 1 ⃗ ∣ 2 = 1 n ∑ i = 1 n ( x i ⃗ ⋅ μ 1 ⃗ ) 2 \frac{1}{n}\sum_{i=1}^n |\vec{x_i}\cdot\vec{\mu_1}|^2=\frac{1}{n}\sum_{i=1}^n (\vec{x_i}\cdot\vec{\mu_1})^2 n1i=1∑n∣xi⋅μ1∣2=n1i=1∑n(xi⋅μ1)2
解释:平方可以把绝对值符号拿掉,光滑曲线处理起来方便。
两个向量做内积可以转化成矩阵乘法:
x i ⃗ ⋅ μ 1 ⃗ = x i T u 1 \vec{x_i}\cdot\vec{\mu_1}=x_i^Tu_1 xi⋅μ1=xiTu1
所以目标函数可以表示为:
1 n ∑ i = 1 n ( x i T u 1 ) 2 \frac{1}{n}\sum_{i=1}^n(x_i^Tu_1)^2 n1i=1∑n(xiTu1)2
括号里面就是矩阵乘法表示内积,转置以后的行向量乘以列向量得到一个数。因为一个数的转置还是其本身,所以又可以将目标函数化为:
1 n ∑ i = 1 n ( x i T u 1 ) T ( x i T u 1 ) \frac{1}{n}\sum_{i=1}^n(x_i^Tu_1)^T(x_i^Tu_1) n1i=1∑n(xiTu1)T(xiTu1)
这样就可以把括号去掉!去掉以后变成:
1 n ∑ i = 1 n ( u 1 T x i ) T x i T u 1 \frac{1}{n}\sum_{i=1}^n(u_1^Tx_i)^Tx_i^Tu_1 n1i=1∑n(u1Txi)TxiTu1
由于u1和i无关,可以把它拿到求和符外面:
1 n u 1 T ( ∑ i = 1 n ( x i x i T ) u 1 \frac{1}{n} u_1^T(\sum_{i=1}^n(x_ix_i^T)u_1 n1u1T(i=1∑n(xixiT)u1
注意,其实括号里面是一个矩阵乘以自身的转置,这个矩阵形式如下:
X
=
[
x
1
x
2
⋯
x
n
]
X = [x_1\quad x_2 \quad \cdots \quad x_n]
X=[x1x2⋯xn]
X
T
=
[
x
1
T
x
2
T
⋮
x
n
T
]
X^T= \left[ \begin{matrix} \quad x_1^T \quad \\ \quad x_2^T \quad\\ \quad \vdots \quad \\ \quad x_n^T\quad \end{matrix} \right]
XT=⎣⎢⎢⎢⎡x1Tx2T⋮xnT⎦⎥⎥⎥⎤
X矩阵的第i列就是xi,于是有:
X X T = ∑ i = 1 n x i x i T XX^T= \sum_{i=1}^nx_ix_i^T XXT=i=1∑nxixiT
所以目标函数最后化为:
1 n u 1 T X X T u 1 \frac{1}{n}u_1^TXX^Tu_1 n1u1TXXTu1
上式到底有没有最大值呢?如果没有前面的1/n,那就是就是一个标准的二次型!并且XX’(为了方便,用’表示转置)得到的矩阵是一个半正定的对称阵!为什么?首先XX’是对称阵,因为(XX’)’=XX’,下面证明它是半正定,什么是半正定?就是所有特征值大于等于0。
假设XX’的某一个特征值为
λ
\lambda
λ,对应的特征向量为
ξ
\xi
ξ,则有:
X
X
T
ξ
=
λ
ξ
XX^T\xi = \lambda\xi
XXTξ=λξ
( X X T ξ ) T ξ = ( λ ξ ) T ξ (XX^T\xi)^T\xi= (\lambda\xi)^T\xi (XXTξ)Tξ=(λξ)Tξ
ξ T X X T ξ = λ ξ T ξ \xi^TXX^T\xi = \lambda\xi^T\xi ξTXXTξ=λξTξ
ξ
T
X
X
T
ξ
=
(
X
T
ξ
)
T
(
X
T
ξ
)
=
∣
∣
X
T
ξ
∣
∣
2
=
λ
ξ
T
ξ
=
∣
∣
ξ
∣
∣
2
∣
∣
X
T
ξ
∣
∣
2
=
λ
∣
∣
ξ
∣
∣
2
→
λ
≥
0
\xi^TXX^T\xi = (X^T\xi)^T(X^T\xi) = ||X^T\xi||^2= \lambda\xi^T\xi = ||\xi||^2||X^T\xi||^2=\lambda||\xi^||^2\rightarrow\lambda\ge0
ξTXXTξ=(XTξ)T(XTξ)=∣∣XTξ∣∣2=λξTξ=∣∣ξ∣∣2∣∣XTξ∣∣2=λ∣∣ξ∣∣2→λ≥0
证明完毕!对于半正定阵的二次型,存在最大值!现在问题就是如何求目标函数的最大值?以及取最大值时u1的方向?下面介绍两种方法。
方法一 拉格朗日乘数法
目标函数和约束条件构成了一个最大化问题:
{
m
a
x
{
u
1
T
X
X
T
u
1
}
u
1
T
u
1
=
1
\begin{cases} max\{{u_1^TXX^Tu_1} \}\\ \quad u_1^Tu_1=1\\ \end{cases}
{max{u1TXXTu1}u1Tu1=1
构造拉格朗日函数:
f ( u 1 ) = u 1 T X X T u 1 + λ ( 1 − u 1 T u 1 ) f(u_1) = u_1^TXX^Tu_1 + \lambda(1 - u_1^Tu_1) f(u1)=u1TXXTu1+λ(1−u1Tu1)
对u1求导
∂ f ∂ u 1 = 2 X X T u 1 − 2 λ u 1 = 0 → X X T u 1 = λ u 1 \frac{\partial f}{\partial u_1} =2XX^Tu_1-2\lambda u_1 = 0\rightarrow XX^Tu_1=\lambda u_1 ∂u1∂f=2XXTu1−2λu1=0→XXTu1=λu1
显然,u1即为XX’特征值对应的特征向量!XX’的所有特征值和特征向量都满足上式,那么将上式代入目标函数表达式即可得到
u 1 T X X T u 1 = λ u 1 T u 1 = λ u_1^TXX^Tu_1 = \lambda u_1^Tu_1= \lambda u1TXXTu1=λu1Tu1=λ
所以,如果取最大的那个特征值,那么得到的目标值就最大。有可能你会有疑问,为什么一阶导数为0就是极大值呢?那么再求二阶导数:
∂
2
f
∂
u
1
=
2
(
X
X
T
−
λ
I
)
,
当
λ
取
X
X
T
最
大
特
征
值
λ
1
时
X
X
T
−
λ
1
I
为
半
负
定
阵
\frac{\partial ^2f}{\partial u_1} = 2(XX^T-\lambda I),当 \lambda取XX^T最大特征值\lambda_1时XX^T-\lambda_1I为半负定阵
∂u1∂2f=2(XXT−λI),当λ取XXT最大特征值λ1时XXT−λ1I为半负定阵
二阶导数半负定,所以,目标函数在最大特征值所对应的特征向量上取得最大值!所以,第一主轴方向即为第一大特征值对应的特征向量方向。第二主轴方向为第二大特征值对应的特征向量方向,以此类推,证明类似。
下面介绍第二种方法
方法二 奇异值法
这方法是从矩阵分析里面总结的,随便取个名叫奇异值法。
首先,对于向量x,其二范数(也就是模长)的平方为:
∣ ∣ x ∣ ∣ 2 2 = < x , x > = x T x ||x||_2^2 = <x,x>=x^Tx ∣∣x∣∣22=<x,x>=xTx
所以有:
u 1 T X X T u 1 = ( X T u 1 ) T ( X T u 1 ) = < X T u 1 , X T u 1 > = ∣ ∣ X T u 1 ∣ ∣ 2 2 u_1^TXX^Tu_1 = (X^Tu_1)^T(X^Tu_1)= < X^Tu_1,X^Tu_1> = ||X^Tu_1||_2^2 u1TXXTu1=(XTu1)T(XTu1)=<XTu1,XTu1>=∣∣XTu1∣∣22
把二次型化成一个范数的形式,最大化上式也即这个问题:对于一个矩阵,它对一个向量做变换,变换前后的向量的模长伸缩尺度如何才能最大?这个很有趣,简直就是把矩阵的真面目给暴露出来了。为了给出解答,下面引入矩阵分析中的一个定理:
∣ ∣ A x ∣ ∣ ∣ ∣ x ∣ ∣ ≤ σ 1 ( A ) = ∣ ∣ A ∣ ∣ 2 \frac{||Ax||}{||x||}\leq\sigma_1(A)=||A||^2 ∣∣x∣∣∣∣Ax∣∣≤σ1(A)=∣∣A∣∣2
σ 1 ( A ) \sigma_1(A) σ1(A)示矩阵A的最大奇异值!一个矩阵A的奇异值为AA’(或A’A)的特征值开平方,前面讲过AA’的特征值都大于等于0。当x为单位向量时,上式就是我们的目标函数表达式。然而,上式只是告诉我们能取到最大值是多少,并没有说取到最大值时x的方向,要想知道取到最大值时的方向,那就来证明这个定理吧!
考察对称阵
A T A ϵ C n × n A^TA\epsilon C^{n\times n} ATAϵCn×n
设
λ 1 ≥ λ 2 ≥ ⋯ ≥ λ n ≥ 0 \lambda_1\ge\lambda_2\ge\cdots\ge\lambda_n\ge0 λ1≥λ2≥⋯≥λn≥0
为其n个特征值,并令与之对应的单位特征向量为:
ξ 1 , ξ 2 , ξ 3 , ⋯   , ξ n \xi_1,\xi_2,\xi_3,\cdots,\xi_n ξ1,ξ2,ξ3,⋯,ξn
对了,忘了提醒,对称阵不同特征值对应的特征向量两两正交!这组特征向量构成了空间中的一组单位正交基。
任意取一个向量x,将其表示为
x = ∑ i = 1 n α i ξ i x = \sum_{i=1}^n\alpha_i\xi_i x=i=1∑nαiξi
则
∣
∣
x
∣
∣
2
2
=
<
x
,
x
>
=
α
1
2
+
⋯
+
α
n
2
||x||_2^2=<x,x>=\alpha_1^2+\cdots+\alpha_n^2
∣∣x∣∣22=<x,x>=α12+⋯+αn2
∣ ∣ A x ∣ ∣ 2 2 = < A x , A x > = ( A x ) T A x = x T A T A x = < x , A T A x > ||Ax||_2^2=<Ax,Ax>=(Ax)^TAx=x^TA^TAx=<x,A^TAx> ∣∣Ax∣∣22=<Ax,Ax>=(Ax)TAx=xTATAx=<x,ATAx>
将代入上式可得
<
x
,
A
T
A
x
>
=
<
α
1
ξ
1
+
⋯
+
α
n
ξ
n
,
α
1
A
T
A
ξ
1
+
⋯
+
α
n
A
T
A
ξ
n
>
<x, A^TAx>=<\alpha_1\xi_1+\cdots+\alpha_n\xi_n,\alpha_1A^TA\xi_1+\cdots+\alpha_nA^TA\xi_n>
<x,ATAx>=<α1ξ1+⋯+αnξn,α1ATAξ1+⋯+αnATAξn>
=
<
α
1
ξ
1
+
⋯
+
α
n
ξ
n
,
λ
1
α
1
ξ
1
+
⋯
+
λ
1
α
1
ξ
n
>
\quad\quad\quad\quad\quad\quad=<\alpha_1\xi_1+\cdots+\alpha_n\xi_n,\lambda_1\alpha_1\xi_1+\cdots+\lambda_1\alpha_1\xi_n>
=<α1ξ1+⋯+αnξn,λ1α1ξ1+⋯+λ1α1ξn>
由于这些单位特征向量两两正交,只有相同的做内积为1,不同的做内积为0.所以上式做内积出来的结果为:
< α 1 ξ 1 + ⋯ + α n ξ n , λ 1 α 1 ξ 1 + ⋯ + λ n α n ξ n > = λ 1 α 1 2 + ⋯ + λ n α n 2 <\alpha_1\xi_1+\cdots+\alpha_n\xi_n,\lambda_1\alpha_1\xi_1+\cdots+\lambda_n\alpha_n\xi_n>=\lambda_1\alpha_1^2+\cdots+\lambda_n\alpha_n^2 <α1ξ1+⋯+αnξn,λ1α1ξ1+⋯+λnαnξn>=λ1α12+⋯+λnαn2
根据特征值的大小关系有
λ 1 α 1 2 + ⋯ + λ n α n 2 ≤ λ 1 ( α 1 2 + ⋯ + α n 2 ) = λ − 1 ∣ ∣ x ∣ ∣ 2 2 \lambda_1\alpha_1^2+\cdots+\lambda_n\alpha_n^2\leq\lambda_1(\alpha_1^2+\cdots+\alpha_n^2)=\lambda-1||x||_2^2 λ1α12+⋯+λnαn2≤λ1(α12+⋯+αn2)=λ−1∣∣x∣∣22
所以
∣ ∣ A x ∣ ∣ 2 ∣ ∣ x ∣ ∣ 2 ≤ λ 1 = σ 1 \frac{||Ax||_2}{||x||_2}\leq\sqrt{\lambda_1}=\sigma_1 ∣∣x∣∣2∣∣Ax∣∣2≤λ1=σ1
定理得证!
显然,当x= ξ 1 \xi_1 ξ1时取得最大值 σ 1 \sigma_1 σ1
∣ ∣ A ξ 1 ∣ ∣ 2 2 = < ξ 1 , A T A ξ 1 > = < ξ 1 , λ 1 ξ 1 > = λ 1 ||A\xi_1||_2^2=<\xi_1,A^TA\xi_1>=<\xi_1,\lambda_1\xi_1>=\lambda_1 ∣∣Aξ1∣∣22=<ξ1,ATAξ1>=<ξ1,λ1ξ1>=λ1
∣ ∣ A ξ 1 ∣ ∣ 2 = λ 1 = σ 1 ||A\xi_1||_2=\sqrt{\lambda_1}=\sigma_1 ∣∣Aξ1∣∣2=λ1=σ1
再回到我们的问题,需要最大化:
u 1 T X X T u 1 = ∣ ∣ X T u 1 ∣ ∣ 2 2 u_1^TXX^Tu_1=||X^Tu_1||_2^2 u1TXXTu1=∣∣XTu1∣∣22
将X’代入上面证明过程中的矩阵A,则u1的方向即为A’A=(X’)‘X’=XX’最大特征值对应的特征向量的方向!
所以第一主轴已经找到,第二主轴为次大特征值对应的特征向量的方向,以此类推。
两种方法殊途同归,现在来解答关于主成分保留占比的问题。上面我们知道第一主轴对应的最大值是最大奇异值(也就是AA’最大特征值开平方),第二主轴对应的最大值是次大奇异值,以此类推。那么假设取前r大奇异值对应的主轴作为提取的主成分,则提取后的数据信息占比为:
∑ i = 1 r σ i 2 ∑ i = 1 k σ i 2 \sqrt\frac{\sum_{i=1}^r\sigma_i^2}{\sum_{i=1}^k\sigma_i^2} ∑i=1kσi2∑i=1rσi2
分子是前r大奇异值的平方和,分母是所有奇异值的平方和。
到此,主成分分析PCA就讲完了,文章最后提到了奇异值,关于这个,后面的奇异值分解(SVD)文章将会详细讲解并给出其具体应用!
以上内容编辑:郭南南