PCA算法的三种求解形式对比

前段时间回顾PCA算法时,发现存在三种不同的求解形式。一种是直接通过求解中心化后的样本数据XcenterX_{center}SVD分解得到映射向量;一种是先求出XcenterX_{center}的协方差矩阵CC,然后计算对称矩阵CC特征分解,最后得到映射向量;最后一种(也是常用的一种)也是先求出XcenterX_{center}的协方差矩阵CC,然后计算对称矩阵CCSVD分解,最后得到映射向量。当时很困惑到底应该用哪种,哪种是最正确的做法,因此对相关的知识点进行了梳理,也就有了这篇笔记。

根据牵涉到的知识点,这篇笔记将先介绍随机变量的数字特征(期望、方差等)以及数理统计中常用的统计量(样本均值、样本方差),接着介绍特征值、特征向量和特征分解,然后介绍SVD分解,最后分析PCA的三种求解形式之间的关系。

均值和方差

随机变量的数字特征

X,YX,Y都是一维随机变量。
数学期望:E[X]E[X]

方差:D[X]=Var[X]=E[(XE[X])2]=E[X2](E[X])2D[X]=Var[X]=E[(X-E[X])^2]=E[X^2]-(E[X])^2

协方差:Cov(X,Y)=E[(XE[X])(YE[Y])]=E[XY]E[X]E[Y]Cov(X,Y)=E[(X-E[X])(Y-E[Y])]=E[XY]-E[X]E[Y]. 反应XXYY相互间关系。

相关系数:ρXY=Cov(X,Y)D[X]D[Y]\rho_{XY}=\frac{Cov(X,Y)}{\sqrt{D[X]\cdot \sqrt{D[Y]}}}

协方差矩阵(对称阵):
C=[Cov(X,X)Cov(X,Y)Cov(Y,X)Cov(Y,X)] C= \left[ \begin{matrix} Cov(X,X) & Cov(X,Y) \\ Cov(Y,X) & Cov(Y,X) \\ \end{matrix} \right]

数理统计中常用统计量

Xi,YiX_i, Y_i都是一维数据,即XiX_i只有一个特征。
样本均值:X=1Ni=1NXi\overline{X}=\frac{1}{N}\sum_{i=1}^{N}X_i

样本方差:S2=1N1i=1N(XiX)2S^2=\frac{1}{N-1}\sum_{i=1}^{N}(X_i-\overline{X})^2

协方差:Cov(X,Y)=1N1i=1N(XiX)(YiY)Cov(X,Y)=\frac{1}{N-1}\sum_{i=1}^{N}(X_i-\overline{X})(Y_i-\overline{Y})
协方差矩阵的计算类似。

上述公式也是机器学习中计算μ,σ2\mu,\sigma^2的基本公式。

对多维样本(样本具有多个特征),令XX为包含mmnn维样本x(i)x^{(i)}的样本集。则:
X=[x(1)Tx(2)Tx(m)T]=[x1(1)x2(1)xn(1)x1(2)x2(2)xn(2)x1(m)x2(m)xn(m)] X= \left[ \begin{matrix} {x^{(1)}}^T \\ {x^{(2)}}^T \\ \vdots \\ {x^{(m)}}^T \\ \end{matrix} \right]= \left[ \begin{matrix} x^{(1)}_1 & x^{(1)}_2 & \dots & x^{(1)}_n\\ x^{(2)}_1 & x^{(2)}_2 & \dots & x^{(2)}_n \\ \vdots & \vdots & \dots & \vdots \\ x^{(m)}_1 & x^{(m)}_2 & \dots & x^{(m)}_n \\ \end{matrix} \right]
均值、方差的计算都是每个维度独立进行的。
X=μj=xj=1mi=1mxj(i)μ=[μ1,μ2,,μn] X=\mu_j=\overline{x}_j=\frac{1}{m}\sum_{i=1}^{m}x^{(i)}_j \\ \mu=[\mu_1, \mu_2, \dots, \mu_n]

% matlab代码:
mu = mean(X);

协方差Cov(xi,xj)Cov(x_i,x_j)
Cov(xi,xj)=Cov(xj,xi)=1m1k=1m(xi(k)xi)(xj(k)xj) Cov(x_i,x_j)=Cov(x_j,x_i)=\frac{1}{m-1}\sum_{k=1}^{m}(x^{(k)}_i-\overline{x}_i)(x^{(k)}_j-\overline{x}_j)
协方差矩阵CCn×nn\times n对称矩阵):
C=[Cov(x1,x1)Cov(x1,x2)Cov(x1,xn)Cov(x2,x1)Cov(x2,x2)Cov(x2,xn)Cov(xn,x1)Cov(xn,x2)Cov(xn,xn)] C= \left[ \begin{matrix} Cov(x_1,x_1) & Cov(x_1,x_2) & \dots & Cov(x_1,x_n) \\ Cov(x_2,x_1) & Cov(x_2,x_2) & \dots & Cov(x_2,x_n) \\ \vdots & \vdots & \dots & \vdots \\ Cov(x_n,x_1) & Cov(x_n,x_2) & \dots & Cov(x_n,x_n) \\ \end{matrix} \right]

%% matlab代码:
C = cov(X) 
% X_center = bsxfun(@minus, mu, X);
% C = cov(C_center);
% C = 1/(m-1)*X_center'*X_center; 

特征分解

特征值和特征向量

定义:设AAnn方阵λ\lambda为变量,把λEA=0|\lambda E-A|=0的根称为AA特征值,其中λEA=0|\lambda E-A|=0称为AA的特征多项式。设λi\lambda_iAA的特征值,则齐次线性方程组(λiEA)x=0(\lambda_iE-A)x=0的非零解向量称为A对应于λi\lambda_i的特征向量。
Ap=λp,p̸=0Ap=\lambda p, p\not=0λ\lambda为特征值,pp为特征向量。

只要是方阵,就有特征值和特征向量。

特征值和特征向量的性质:
1.n阶方程有且只有n个特征值(k重特征值看做k个)
2.λ1+λ2++λn=tr(A)\lambda_1+\lambda_2+\dots+\lambda_n=tr(A)
3.λ1λ2λn=A\lambda_1 \cdot \lambda_2 \cdots\lambda_n=|A|
4.若λ\lambdaAA的特征值,pp为对应的特征向量,kk为正整数,则λk\lambda^kAkA^k的特征值,pp仍是对应的特征向量。即,如果Ap=λpp̸=0Ap=\lambda p且p\not=0,那么有Akp=λkpA^kp=\lambda^kp.

相似矩阵

相似变换:A,BA, Bnn方阵,如果存在nn阶可逆矩阵P(P̸=0)P(|P|\not=0),使得P1AP=BP^{-1}AP=B则称AABB相似P1APP^{-1}AP称为对AA进行相似变换PP称为相似变换矩阵
向量的正交:aTb=0a^Tb=0
正交矩阵:实方阵AA满足ATA=EA^TA=E
如果相似变换矩阵PP为正交矩阵,则称AABB正交相似P1APP^{-1}AP称为对AA进行正交相似变换

相似对角化: 若方阵AA能与对角阵Λ\Lambda相似,则称AA可相似对角化。即P1AP=ΛP^{-1}AP=\Lambda,其中Λ\Lambda称为AA的相似标准形。
Λ\Lambda的所有对角元为AA的全部特征值Λ=diag(λ1,λ2,,λn)\Lambda=diag(\lambda_1, \lambda_2, \dots, \lambda_n)

不是所有的方阵都可相似对角化。
nn阶方阵AA可相似对角化的充要条件AAnn个线性无关的特征向量

用来把AA相似对角化的相似变换矩阵PP是以AAnn个线性无关的特征向量为列所构成的矩阵,所化为的对角矩阵Λ\Lambda的对角元恰好为nn个特征向量,并且特征值在Λ\Lambda中的排列顺序与特征向量在PP中的排列顺序相对应。

特征分解

只有可相似对角化的方阵,才能进行特征分解。
特征分解:nn阶方阵A=PΛP1A=P\Lambda P^{-1}. AP=ΛP\Rightarrow AP=\Lambda P
其中PPn×nn\times n方阵,第ii列为AA的特征向量pip_i. Λ\Lambda是对角阵,Λii\Lambda_{ii}pip_i对应的特征值。

%% matlab代码:
[P, Lambda]=eig(A);

SVD分解

可以看做特征分解在任意矩阵上的推广。
针对任意大小的矩阵Am×nA_{m\times n}
A=UΣVH={U:m×mΣ:m×nV:n×nVHV(VH=VT) A=U\Sigma V^H= \left\{ \begin{array}{l} U: m\times m矩阵 \\ \Sigma: m\times n对角阵 \\ V:n\times n矩阵,V^H为V的共轭转置(对实矩阵V^H=V^T) \end{array} \right.
UU的列向量(左奇异向量)为AAHAA^H的特征向量。
Σ\Sigma非零对角元为AAHAA^H(或AHAA^HA)的特征值平方根。
VV的列向量(右奇异向量)为AHAA^HA的特征向量。

%% matlab代码:
[U, S, V] = svd(A);
% eig()返回的结果中,对角元并不是按从大到小的顺序排列.
[P1, Lambda1] = eig(A'*A); [data,idx]= sort(diag(Lambda1),'descend'); P1= P1(:,idx); Lambda1= diag(data);
[P2, Lambda2] = eig(A*A'); [data,idx]= sort(diag(Lambda2),'descend'); P2= P2(:,idx); Lambda2= diag(data);
% U和P2相等. V和P1相等. S和sqrt(Lambda2)相等, 和sqrt(Lambda1)不完全相等。

对实对称矩阵的单独讨论

由于PCA中涉及协方差矩阵的特征分解或者SVD分解,而协方差矩阵为实对称矩阵,因此有必要针对实对称矩阵具体分析其特征分解和SVD分解的特性。

1.实对称矩阵AA的特征值都是实数。
2.实对称矩阵AA中互异特征值λ,μ\lambda,\mu对应的特征向量p,qp,q一定正交(pTq=0p^Tq=0)。对一般方阵,p,qp,q只是线性无关。

3.实对称矩阵AA一定可相似对角化P1AP=diag(λ1,λ2,,λn)P^{-1}AP=diag(\lambda_1, \lambda_2, \dots, \lambda_n),并且可以用正交相似变化进行相似对角化Q1AQ=diag(λ1,λ2,,λn)Q^{-1}AQ=diag(\lambda_1, \lambda_2, \dots, \lambda_n)
其中QQ的第ii列是PPpip_i的正交单位化,即QQ为正交阵(Q1=QTQ^{-1}=Q^T)。

4.对实对称矩阵AA,有AHA=ATA=AAT=AAH=A2A^HA=A^TA=AA^T=AA^H=A^2
5.实对称矩阵AA的SVD分解:
A=UΣVTΣATA(AATAλ,p,ATA=A2λ2,p(V),AAT=A2λ2,p(U) A=U\Sigma V^T \\ \begin{array}{l} 其中\Sigma对角元是A^TA(或AA^T)的特征值平方根\\ 令A的特征值和特性向量为\lambda,p \\ 则有,A^TA=A^2的特征值和特征向量分别为\lambda^2,p(\rightarrow V)\\ 同理,AA^T=A^2的特征值和特征向量分别为\lambda^2,p(\rightarrow U) \end{array}
因此,对实对称矩阵AA,其特征分解和SVD分解的结果相同:

%% matlab代码
[U, S, V] = svd(A);
[P, lambda] = eig(A); [data,idx]= sort(diag(lambda),'descend'); P= P(:,idx); lambda= diag(data);
% S和lambda相等. U,V,P之间两两相等(向量方向可能不同).

PCA三种求解形式对比

对多维样本(样本具有多个特征),令XX为包含mmnn维样本x(i)x^{(i)}的样本集:
X=[x(1)Tx(2)Tx(m)T]=[x1(1)x2(1)xn(1)x1(2)x2(2)xn(2)x1(m)x2(m)xn(m)] X= \left[ \begin{matrix} {x^{(1)}}^T \\ {x^{(2)}}^T \\ \vdots \\ {x^{(m)}}^T \\ \end{matrix} \right]= \left[ \begin{matrix} x^{(1)}_1 & x^{(1)}_2 & \dots & x^{(1)}_n\\ x^{(2)}_1 & x^{(2)}_2 & \dots & x^{(2)}_n \\ \vdots & \vdots & \dots & \vdots \\ x^{(m)}_1 & x^{(m)}_2 & \dots & x^{(m)}_n \\ \end{matrix} \right]
PCA降维需要求解XTXX^TX的特征向量。由于XTXX^TX为对称矩阵,因此有三种求解方法:
pca的三种求解方法对比

其中(3)是最为常用的求解方法。

没有更多推荐了,返回首页