1 引言
主成分分析 (Principal Component Analysis, PCA)是一种经典又常用的数据降维算法(注意这里的降维是指特征提取 ,有时也称子空间学习 ,还有一支叫特征选择 ,有兴趣可参这篇博客 ),它的主要思想是寻找数据分布方差最大的投影方向,初次听好像也不太好理解,那就上个图瞧瞧咯。
图1
如图1标注出了信号和噪音的方差方向。我们找数据变化大的方向,变化大则含信息量大,所以认为它代表信号方向,而认为小的数据波动是由噪音引起。事实上,有个叫信噪比的指标:S N R = σ 2 s i g n a l / σ 2 n o i s e S N R = σ s i g n a l 2 / σ n o i s e 2 ,S N R S N R 越大(≫ 1 ≫ 1 ),说明信息越准确噪音越少。图中用x,y座标轴来描述这些数据点的位置,如果我们忽略次要因素,抓主要矛盾,就可以用一个沿着信号方向的轴(投影方向),来刻画这些点,虽然可能会损失一些有用的信息,但是这个过程中我们简化了问题,实现了降维:从二维到一维。
小结一下降维大法的好处:降维可以去除数据中的冗余特征,相应也可减少数据存储空间,更重要的是,方便后续各种算法对数据的进一步处理、分析 !这一小节到这里本应结束,但我还想再上个酷炫的图,已超出PCA范畴,可跳过不看。
图2
如图2A,把一张“彩色的纸”卷起来。如图2B,在纸上随机选取一些数据。如图2C,把纸摊开。不同的颜色代表不同的类别,在现实生活中,数据的呈现形式往往是这个B样子,不仅需要在更高维的空间中描述它们,而且往往导致数据更难区分(同类数据间的欧式距离甚至比非同类的距离都大),所以最好就是找到简单又好分的数据本质的分布空间如C,这种B到C的降维技术就是传说中的流形学习(manifold learning),典型代表有LLE,LPP,NPE等,在此按住不提,总之流行学习是关注局部结构,而PCA关注的是全局。
2 目标函数及求解
上一节简要介绍了PCA的思想,提到了PCA就是找方差大的方向,这一节就是解决怎样来找这些方向。在机器学习模型中,常针对一个要求解的问题,提出若干准则,以此提出一个目标函数,再在数学上对目标函数进行优化,得出问题的解。PCA的准则是,让投影后的数据分布方差尽可能大,所以PCA的目标函数可以这样定义:
max 1 n ∑ i = 1 n ( y i − y ¯ ¯ ¯ ) 2 = max w T w = 1 1 n ∑ i = 1 n ( w T x i ) 2 = max w T w = 1 w T ( 1 n X X T ) w = max w T w = 1 w T C x w (2.1) (2.1) max 1 n ∑ i = 1 n ( y i − y ¯ ) 2 = max w T w = 1 1 n ∑ i = 1 n ( w T x i ) 2 = max w T w = 1 w T ( 1 n X X T ) w = max w T w = 1 w T C x w
其中,
w ∈ R d w ∈ R d 表示投影方向,
y i = w T x i y i = w T x i 是投影后的数据点,
X = [ x 1 , … , x n ] ∈ R d × n X = [ x 1 , … , x n ] ∈ R d × n 是数据矩阵,且我们假设它已经被零均值化处理过,即
x ¯ ¯ ¯ = 1 n ∑ i x i = 0 x ¯ = 1 n ∑ i x i = 0 ,也自然有
y ¯ ¯ ¯ = 0 y ¯ = 0 。
C x C x 就是协方差矩阵,有时也用修正后的,即
C x = 1 n − 1 X X T C x = 1 n − 1 X X T 。关于正交约束,可以这样简单理解,一个作用是使目标式子有解,限制
w w 的变化范围,另一个作用是选择标准化的座标轴,接下来会再提到。
上面是学了一个投影方向(也称子空间),即把数据降成一维,如果要学多个投影方向,很自然地,我们可以让它们的和最大,即:
max ∀ j , w T j w j = 1 ∑ j = 1 c w T j C x w j = max W T W = I c T r ( W T C x W ) (2.2) (2.2) max ∀ j , w j T w j = 1 ∑ j = 1 c w j T C x w j = max W T W = I c T r ( W T C x W )
这里,
W = [ w 1 , … , w c ] ∈ R d × c W = [ w 1 , … , w c ] ∈ R d × c 是投影矩阵,
I c ∈ R c × c I c ∈ R c × c 表示单位矩阵,正交约束使得各投影方向自身是标准化的,且它们之间是两两正交的,为什么要正交,可简单类比我们常用x,y轴表示平面上的点,用xyz轴表示三维空间中的点,都是为了使问题简化而已。
现在就要来求解上述提出的目标式子,更一般地,我们直接对式(2.2)进行操作。设Λ ∈ R c × c Λ ∈ R c × c 为拉格朗日乘子,式(2.2)的拉格朗日函数为:
J ( W ) = T r ( W T C x W ) − T r ( Λ ( W T W − I c ) ) (2.3) (2.3) J ( W ) = T r ( W T C x W ) − T r ( Λ ( W T W − I c ) )
求导并置零得:
∂ J ( W ) ∂ W = 2 C x W − W ( Λ + Λ T ) = 0 (2.4) (2.4) ∂ J ( W ) ∂ W = 2 C x W − W ( Λ + Λ T ) = 0
记
Λ ~ = 1 2 ( Λ + Λ T ) Λ ~ = 1 2 ( Λ + Λ T ) ,有
C x W = W Λ ~ C x W = W Λ ~ 。所以,
W W 就是
C X C X 的特征向量矩阵,
Λ ~ Λ ~ 是对应的特征值组成的对角矩阵。
J ( W ) = T r ( W T W Λ ~ ) = T r ( Λ ~ ) J ( W ) = T r ( W T W Λ ~ ) = T r ( Λ ~ ) ,要最大化
J ( W ) J ( W ) ,自然取
C x C x 的前
c c 个最大的特征值,相应地,
W W 就是由C x C x 的前c c 大特征值对应的特征向量按列组成的矩阵。通过投影矩阵
W W ,数据从
d d 维降低到
c c 维。
关于主成分个数(c c ),通常根据需要保留的方差百分比,即需要保留的信息量来确定。比如我们要保留99%的信息量,将λ λ 从大到小排列,即λ 1 > λ 2 > … > λ n λ 1 > λ 2 > … > λ n ,找到最小的k k ,使满足:
∑ k j = 1 λ j ∑ n j = 1 λ j ≥ 0.99 ∑ j = 1 k λ j ∑ j = 1 n λ j ≥ 0.99
3 再理解
上一节,我们走完了机器学习中传统的目标引出和公式推导过程,这一节中,我们尝试从另外几个角度来剖析PCA,感受一下殊途同归。
3.1 特征值分解
前面已经引出了协方差的概念,在概率论和统计学中,协方差用于衡量变量之间的总体误差,方差是协方差的特例,即两个变量相同情况下的协方差。在协方差矩阵中,对角线元素对应了各变量自身的方差大小,非对角线元素就是不同变量之间的协方差。如果两个变量是统计独立的,那么两者之间的协方差就是0。(为了避免侧重点跑偏,关于协方差的具体内容在此不做展开,有兴趣可自行谷歌/百度)
所以我们可以直接拿协方差矩阵做文章,简单分析一下,我们想要的协方差矩阵应该是介个样纸的:对角线元素尽可能大,非对角线元素尽量为0,即协方差矩阵最好是一个对角阵 。原始数据X X ,对应原始协方差矩阵C x C x ,C x C x 通常含有冗余特征,即非对角,现在我们想要通过一个投影变换Y = W T X Y = W T X ,使得降维后新数据的协方差矩阵C y = W T C x W C y = W T C x W (近似)为对角阵。注意C x C x 实对称,是一个正规矩阵(满足A T A = A A T , A ∈ R n × n A T A = A A T , A ∈ R n × n ),根据矩阵论的知识,一定可以对角化:D = P T C x P D = P T C x P ,其中P ∈ R d × d P ∈ R d × d 由C x C x 的特征向量按列组成,且P P 是个正交阵,D ∈ R d × d D ∈ R d × d 是对应的特征值组成的对角矩阵。嘿!这不就是我们想要的对角矩阵嘛,对比C y = W T C x W C y = W T C x W ,我们可令W W 由P P 的某c c 列按列组成,因为我们想要对角元素尽可能大,这c c 列自然是对应C x C x 的前c c 大特征值的列(特征向量),跟上一节中推导的结果一致!
3.2 奇异值分解(SVD)
SVD(singular value decomposition),即奇异值分解,跟上一小节的特征值分解有很大关联,我们不妨先来对比一下两者:
方法
表示
说明
特征值分解
A = P Λ P − 1 A = P Λ P − 1
A A 是方阵,P P 可逆但不需要是正交阵,Λ Λ 不需要是半正定阵(因为可以有λ < 0 λ < 0 )
SVD
A = U Σ V T A = U Σ V T
A A 不需要为方阵, U , V U , V 是正交阵,Σ Σ 为半正定阵(因为奇异值≥ ≥ 0)
【注】方阵A A 半正定:∀ x ∈ R n ∀ x ∈ R n ,有x T A x ≥ 0 x T A x ≥ 0
令Y ~ = 1 n √ X T Y ~ = 1 n X T ,则有Y ~ T Y ~ = 1 n X X T = C x Y ~ T Y ~ = 1 n X X T = C x 。对Y ~ Y ~ 进行SVD:Y ~ = U Σ V T Y ~ = U Σ V T ,那么V V 就包含了Y T Y Y T Y 也即C x C x 的特征向量。SVD这个角度更多地是为了求解的方便(即已知我们要求解的投影方向就是协方差矩阵的特征向量),在数值计算上,SVD比特征值分解要稳定一些,而且对一个n × n n × n 的矩阵进行特征分解的计算复杂度高达O ( n 3 ) O ( n 3 ) 。
补充:不难发现,对于一个对称半正定矩阵A A (保证了可对角化和特征值≥ 0 ≥ 0 ),特征分解和奇异值分解是等价的,因为A = P Λ P T A = P Λ P T 既可以看做是特征分解,也可以看做是U = V U = V 时的奇异值分解,此时A A 的特征值=奇异值。无巧不成书,幸运的我们幸运地发现,C x C x 正是这样一个对称半正定阵!所以实际上,我们对C x C x 进行特征分解或者SVD都是可以得到投影方向滴 。
3.3 数据重构
也可从数据重构的角度来看待PCA,主要思想是将投影后的数据重新投影回原空间,使得数据的重构误差最小,公式化表述就是:
min W ∈ R d × c ∥ X − W W T X ∥ 2 F s . t . w T i w j = 0 ( i ≠ j ) , w T i w i = 1 (3.1) (3.1) min W ∈ R d × c ‖ X − W W T X ‖ F 2 s . t . w i T w j = 0 ( i ≠ j ) , w i T w i = 1
首先,如果我们保留100%的信息量,即选择的主成分个数
c c 就等于原始维度
d d ,相当于不降维,
W W 是
d × d d × d 大小的正交矩阵,有
W W T = I d W W T = I d ,此时重构误差为0。下面,我们来证明式(3.1)等价于式(2.2)。
( 3.1 ) ⇔ min W T W = I c T r ( X − W W T X ) T ( X − W W T X ) ⇔ max W T W = I c T r ( X T W W T X ) ⇔ max W T W = I c 1 n T r ( W T X X T W ) ⇔ ( 2.2 ) (16) (17) (18) (16) ( 3.1 ) ⇔ min W T W = I c T r ( X − W W T X ) T ( X − W W T X ) (17) ⇔ max W T W = I c T r ( X T W W T X ) (18) ⇔ max W T W = I c 1 n T r ( W T X X T W ) ⇔ ( 2.2 )
【注】上面第一个等价就是按定义展开,第二个是去掉了一些无关的常数项,不影响最大或最小问题的解,第三个用到了迹的性质Tr(AB)=Tr(BA)。
3.4 低秩近似
还有一种观点,认为PCA是找一个低秩矩阵来近似数据矩阵,用欧式距离来衡量的话,就是:
min r a n k ( Z ) = c ∥ X − Z ∥ 2 F . (3.2) (3.2) min r a n k ( Z ) = c ‖ X − Z ‖ F 2 .
根据满秩分解,
Z ∈ R d × n Z ∈ R d × n 可以分解为:
Z = U V T Z = U V T ,其中
U ∈ R d × c , V ∈ R n × c U ∈ R d × c , V ∈ R n × c ,且有
U T U = I c U T U = I c 。式(2.2)可以改写为:
min U T U = I c , V ∥ X − U V T ∥ 2 F . (3.2) (3.2) min U T U = I c , V ‖ X − U V T ‖ F 2 .
这里,
U U 可以看做是
d d 维空间的
c c 个基,
V V 可以看做是数据点在该空间中的(低维)表达。下面我们还是来把式(3.2)跟式(2.2)联系起来。式(3.2)对
V V 求偏导并置零,可得
V = X T U V = X T U ,代回(3.2)中可得:
max U T U = I c T r ( U T X X T U ) . (3.3) (3.3) max U T U = I c T r ( U T X X T U ) .
又回到最初的起点啦,即PCA现在跟低秩近似也联系起来了。
4 拓展
对本节内容如果有兴趣但没时间仔细看过程,大概浏览一下结论就行,这一节主要就是输出一种认识,学习和生活中,不要轻易小瞧看似简单的人/物,觉得自己了然了看穿了,可能只是因为自己还在雾中。
4.1 PCA与Kmeans
PCA是经典的降维算法,Kmeans是经典的聚类算法,在这一小节里,咱们来瞅瞅它们两个在私底下会不会有什么基情。Kmeans大意是先随机给定一些聚类中心,然后依据数据点距聚类中心的远近给数据分配簇标签,然后计算新的聚类中心,然后再重新分配,然后再计算,再分配……最终聚类中心会移动到一个比较好的位置,使得数据点距聚类中心的距离的平方和比较小。对,就是根据距离的平方和作为准则的,所以目标函数自然可以这样写:
min C k ∑ k = 1 K ∑ i ∈ C k ∥ x i − m k ∥ 2 (4.1) (4.1) min C k ∑ k = 1 K ∑ i ∈ C k ‖ x i − m k ‖ 2
这就是我们常见的Kmeans目标式,其中
K K 表示簇的个数,
C k C k 表示第
k k 个簇的数据点集合,
m k = ∑ i ∈ C k 1 n k x i m k = ∑ i ∈ C k 1 n k x i 表示第
k k 个簇的聚类中心,
n k n k 表示第
k k 个簇中的数据点个数。仅通过(4.1)好像看不出什么名堂,那我们就来变一变,看能不能写出更简便的表达式,因为是要找跟PCA之间的关系,所以联想PCA的目标式,看能不能跟(2.2)套一下近乎。下面是公式推导:
( 4.1 ) ⇔ min ∑ k = 1 K ∑ i ∈ C k ( x T i x i − 2 x T i m k + m T k m k ) ⇔ min ∑ i = 1 n x T i x i − 2 ∑ k = 1 K ∑ i ∈ C k x T i m k + ∑ k = 1 K n k m T k m k ⇔ min ∑ i = 1 n x T i x i − ∑ k = 1 K ∑ i ∈ C k x T i m k ( ∵ n k m T k m k = ∑ i ∈ C k x T i m k ) ⇔ min ∑ i = 1 n x T i x i − ∑ k = 1 K 1 n k ∑ i , j ∈ C k x T i x j ⇔ min T r ( X T X ) − T r ( H T X T X H ) ⇔ max H T H = I , H ≥ 0 T r ( H T K H ) ( 4.2 ) (28) (29) (30) (31) (32) (33) (28) ( 4.1 ) ⇔ min ∑ k = 1 K ∑ i ∈ C k ( x i T x i − 2 x i T m k + m k T m k ) (29) ⇔ min ∑ i = 1 n x i T x i − 2 ∑ k = 1 K ∑ i ∈ C k x i T m k + ∑ k = 1 K n k m k T m k (30) ⇔ min ∑ i = 1 n x i T x i − ∑ k = 1 K ∑ i ∈ C k x i T m k ( ∵ n k m k T m k = ∑ i ∈ C k x i T m k ) (31) ⇔ min ∑ i = 1 n x i T x i − ∑ k = 1 K 1 n k ∑ i , j ∈ C k x i T x j (32) ⇔ min T r ( X T X ) − T r ( H T X T X H ) (33) ⇔ max H T H = I , H ≥ 0 T r ( H T K H ) ( 4.2 )
其中引入了一个指示(或标签)矩阵
H ∈ R n × k H ∈ R n × k ,如果
x i x i 是第
j j 个簇的,则
H i j = 1 / n k − − √ H i j = 1 / n k ,否则为0。比如现在有5个样例分别属于两个簇,前两个属于第一个簇,后三个属于第二个簇,则
H H 长这个样纸:
[ 1 / 2 – √ 0 1 / 2 – √ 0 0 1 / 3 – √ 0 1 / 3 – √ 0 1 / 3 – √ ] T [ 1 / 2 1 / 2 0 0 0 0 0 1 / 3 1 / 3 1 / 3 ] T
K = X T X K = X T X 是相似度矩阵,这里是采用的标准内积线性核,也可以扩展到其它核,在此不做赘述。到这里可以小激动一下,因为式(4.2)相比式(4.1)不仅看起来简明多了,而且看上去跟我们目标式(2.2)长得很像,那式(4.2)的解跟式(2.2)的解怎么联系起来呢?还记得上一节中说的特征值分解和SVD分解吧,我们再把它们拿出来瞧瞧(此处忽略
C x C x 中的
1 n 1 n ,且不考虑
C x C x 不可逆的情况):
X = U Σ V T C x = X X T = U Λ U T K = X T X = V Λ V T (34) (35) (36) (34) X = U Σ V T (35) C x = X X T = U Λ U T (36) K = X T X = V Λ V T
上面
U ∈ R d × c U ∈ R d × c 就是PCA中要求的投影矩阵
W W ,
V V 是式(4.2)松弛非负约束后的指示矩阵
H H 。从第一行中的式子可以知道,
V = X T U Σ − 1 V = X T U Σ − 1 ,这说明了什么啊,说明
PCA实际上是在进行一种松弛化的Kmeans聚类,簇的指示矩阵就是投影后的数据矩阵(再缩放一下) 。
拓展的拓展:1)kernel Kmeans跟谱聚类(spectral clustering)有关系;2)实际上,X X T X X T 也叫总体散度矩阵,X H H T X T 是 类 间 散 度 矩 阵 , X H H T X T 是 类 间 散 度 矩 阵 , 可参见线性判别分析LDA,它是另一种经典的降维算法,PCA是无监督的,LDA是有监督。所以Kmeas实际上在min H T r ( S w ) min H T r ( S w ) ,这里S w = S t − S b S w = S t − S b 是类内散度矩阵。3)LDA是已知标签,调整投影矩阵,Kmeans是调整标签。
4.2 Robust PCA
关于鲁棒PCA这个方向,也有很多研究成果,这里只简单地提一种思路,是关于用ℓ 1 ℓ 1 -norm替代ℓ 2 ℓ 2 -norm的,这是一种在机器学习中内十分常用的手法,用于实现鲁棒性或稀疏性。涉及到范数,我们先把式(2.2)改写一下:
min W T W = I c 1 n ∑ i = 1 n ∥ W T x i ∥ 2 2 (4.1) (4.1) min W T W = I c 1 n ∑ i = 1 n ‖ W T x i ‖ 2 2
那么鲁棒PCA就是:
min W T W = I c 1 n ∑ i = 1 n ∥ W T x i ∥ 1 (4.1) (4.1) min W T W = I c 1 n ∑ i = 1 n ‖ W T x i ‖ 1
关于求解的问题超出本文范畴,感兴趣地可以看相关论文。
主要参考文献
【1】Shlens J. A Tutorial on Principal Component Analysis[J]. 2014, 51(3):219-226.
【2】http://ufldl.stanford.edu/tutorial/unsupervised/PCAWhitening/
【3】Ding C H Q, He X. Principal Component Analysis and Effective K-Means Clustering[C]. SIAM ICDM. DBLP, 2004:126–143.
【4】Masaeli M, Yan Y, Cui Y, et al. Convex Principal Feature Selection[C]. SIAM ICDM. DBLP, 2010:619-628.
【5】Nie F, Yuan J, Huang H. Optimal mean robust principal component analysis[C]. ICML. 2014:1062-1070.
【6】Nie F, Huang H, Ding C, et al. Robust Principal Component Analysis with Non-Greedy L1-Norm Maximization[C]. IJCAI. 2011:1433-1438.