深入理解PCA

前言最近一周陆陆续续地看了一写关于SVD,PCA及其相关应用的文章和博客,在这个过程中,把之前很多其实没有搞懂的问题基本都搞清楚了,感觉很有必要写一篇总结性质的博客。PCA,SVD非常类似,但在细节处又有一些差别,需要我们认真去区分。以下我先会简单介绍这三种算法及其应用,最后来分析三者的相同点和不同点。这篇博客主要参考了以下这些资料:Eigenfaces, for facial reco...
摘要由CSDN通过智能技术生成

前言

最近一周陆陆续续地看了一写关于SVD,PCA及其相关应用的文章和博客,在这个过程中,把之前很多其实没有搞懂的问题基本都搞清楚了,感觉很有必要写一篇总结性质的博客。PCA,SVD非常类似,但在细节处又有一些差别,需要我们认真去区分。以下我先会简单介绍这三种算法及其应用,最后来分析三者的相同点和不同点。

这篇博客主要参考了以下这些资料:

SVD

SVD全称是Singular Value Decomposition,中文名称是奇异值分解。 一个 m m mx n n n实数矩阵A的奇异值分解为

A = U Σ V T A =U\Sigma V^{T} A=UΣVT

其中U是一个 m m mx m m m的正交矩阵(矩阵的每一列的范数都为1,且两两正交),V是一个 n n nx n n n的正交矩阵, Σ \Sigma Σ 是一个 m m mx m m m的对角矩阵,且其对角线上的值都为你非负。

其实我们可以这样看,我们可以将A看成是一个从n维向量空间到m维向量空间的线性变换。这里我们只处理实数向量,可以将n维向量空间表示为 R n R^n Rn, 把m维向量空间表示为 R m R^m Rm。而其矩阵分解的过程表达了 R n R^n Rn R m R^m Rm基变换的过程。具体来说, V V V表达了 R n R^n Rn的基从标准基变换到其他基的过程, U U U表达了 R m R^m Rm的基从标准基变换到其他基的过程。

虽然,可以将 A A A看成是一个关于线性变换的矩阵,但是在大多数应用中, A A A常常包含了真实的数据,A的每一行都是一个n维的数据点,例如n个不同的用户给一部电影的打分情况,A中一共有m行,表示m个n维的数据点。这可以看成是A的另外一种解释。

现在我们需要具体说一下SVD的细节, 其中A是一个mxn的矩阵,它的秩为r(r ≤ \le min(m, n)。当对于任意的矩阵A进行SVD分解时,我们需要知道两组向量 u u u’s和 v v v’s。其中 u u u’s是 R m R^m Rm中的向量, v ′ s v's vs R n R^n Rn中的向量。他们组成mxm的矩阵U和nxn的矩阵V。

u u u's和 v v v’s给定4个基本子空间的基:

  • u 1 , . . . , u r u_1, ..., u_r u1,...,ur是A的列空间(column space)的标准正交基
  • u r + 1 , . . . , u m u_{r+1},..., u_{m} ur+1,...,um是A的左null空间(left nullspace) N ( A T ) N(A^T) N(AT)的标准正交基
  • v 1 , . . . , v r v_1, ..., v_r v1,...,vr是A的行空间(row space)的标准正交基
  • v r + 1 , . . . , v n v_{r+1}, ..., v_n vr+1,...,vn是A的null空间(nullspace)的标准正交基

而这些向量满足:

A v 1 = σ u 1 Av_1 = \sigma u_1 Av1=σu1, A v 2 = σ u 2 Av_2 = \sigma u_2 Av2=σu2, …, A v r = σ r u r Av_r = \sigma_r u_r Avr=σrur (1)

其中 σ 1 , σ 2 , . . . , σ r \sigma_1, \sigma_2,...,\sigma_r σ1,σ2,...,σr都是正实数,这样其实可以把 σ i \sigma_i σi看成是 A v i Av_i Avi的长度。 σ \sigma σ‘s会行成mxn的对角矩阵 Σ \Sigma Σ的对角线的前r个值, 而 Σ \Sigma Σ其他元素都为0。

根据式(1)及 u u u’s和 v v v’s的性质,我们可以得到:

A V = U Σ AV = U\Sigma AV=UΣ (2)

又因为V中的列向量都为单位向量,且两两正交,所以 V T V = I V^{T}V= I VTV=I, V T = V − 1 V^T=V^{-1} VT=V1。 所有式(2)可以转换为

A = U Σ V T = u 1 σ 1 v 1 T + . . . + u r σ r v r T A = U\Sigma V^T=u_1\sigma_1 v_1^T + ... + u_r\sigma_r v_r^T A=UΣVT=u1σ1v1T+...+urσrvrT (3)

其实,我们将会看到 σ i 2 \sigma_i^2 σi2 A T A A^TA ATA A A T AA^T AAT的特征值。 当我们令 σ 1 > σ 2 > σ 3 > . . . > σ r \sigma_1 > \sigma_2 > \sigma_3> ... > \sigma_r σ1>σ2>σ3>...>σr时, 式(3)就可以看做是多个根据重要性排序的秩为1的矩阵 u i σ i v i T u_i\sigma_i v_i^T uiσiviT相加的结果。

其实,我们可以将(3)改写为如下形式,

A = W G T A = WG^T A=WGT

其中 W W W是一个mxr的矩阵,G是一个nxr矩阵,满足

W = [ σ 1 u 1 , . . . , σ r u r ] W=[\sigma_1u_1, ..., \sigma_ru_r] W=[σ1u1,...,σrur], G = [ v 1 , . . . , v r ] G=[v_1,...,v_r] G=[v1,...,vr]

接下来我们将看到如何求解v’s和u‘s。 首先我们知道

A T A = ( U Σ V T ) T ( U Σ V T ) = V Σ T U T U Σ V T = V Σ T Σ V T A^TA = (U\Sigma V^T)^T(U\Sigma V^T)=V\Sigma^TU^TU\Sigma V^T=V\Sigma^T\Sigma V^T ATA=(UΣVT)T(UΣVT)=VΣTUTUΣVT=VΣTΣVT (4)

已知 A T A A^TA ATA是一个(半)正定矩阵,所以它必定可以分解成(4)所示的形式,此时V的每一列都是矩阵 A T A A^TA ATA的特征向量,且这些向量都是单位向量,且两两正交,并且$\Sigma^T\Sigma 矩 阵 一 定 是 矩阵一定是 ATA$的特征值矩阵。所以在求解V和$\Sigma$时,我们只需要对角化(半)正定矩阵$ATA$即可。 而且已知 A v i = σ i u i Av_i=\sigma_i u_i Avi=σiui,我们可以很容易地求得 u 1 u_1 u1 u r u_r ur。 而SVD能够成功的最主要原因是对于任意 i ≠ j i \ne j i̸=j:

u i T u j = ( A v i σ i ) T ( A v j a j ) = v i T A T A v j σ i σ j u_i^Tu_j=(\frac{Av_i}{\sigma_i})^T(\frac{Av_j}{a_j}) = \frac{v_i^TA^TAv_j}{\sigma_i\sigma_j} uiTuj=(σiAvi)T(ajAvj)=σiσjviTATAvj

单位向量 u i u_i ui u j u_j uj正交,事实上这些u是 A A T AA^T AAT的特征向量。

PCA

PCA(Principal components analysis),中文是主成分分析,PCA的问题其实是一个基的变换,使得数据在通过线性变换后,在前几维的特征上方差很大,而在其他维度上的方差大小可以忽略不计。方差的大小描述的是一个变量的信息量,我们在讲一个东西的稳定性的时候,往往说要减小方差,如果一个模型的方差很大,那就说明模型不稳定了。但是对于我们用于机器学习的数据(主要是训练数据),方差大才有意义,不然输入的数据都是同一个点,那方差就为0了,这样输入的多个数据就等同于一个数据了。所以,通过这样的一个基变换,我们可以只取前几个方差比较大的特征(称为组成分),而可以舍弃其他特征。

现在假设一个mxn的矩阵M中存储了m个点,每个点都有n个特征(即矩阵的每一行存储了一个数据点)。我们需要对这n个点进行主成分分析,一开始我们需要对M的每一列进行求平均值得到 μ 1 , . . . , μ n \mu_1, ..., \mu_n μ1,...,μn,然后M中每一列的值都减去该列的平均值得到矩阵A,使得A每一列的平均值都为0。这样,这m个中心就是原点0了。

之后我们需要求解A的协方差矩阵C,容易求证:

C = A T A n − 1 C=\frac{A^TA}{n-1} C=n1ATA

其中 C 11 C_{11} C11表示点集在第一维上的方差, C 12 C_{12} C12表示第一维特征和第二维特征的协方差。已知C是(半)正定矩阵,所以我们可以对该矩阵进行对角化操作。

C = Q Δ Q T C = Q\Delta Q^T C=QΔQT

Δ \Delta Δ是一个nxn的对角矩阵, 且对角线上的值降序排列, Q Q Q是一个nxn的单位正交方阵。我们假设Q中的列为 q 1 , q 2 , q 3 , . . . , q n q_1, q_2, q_3,...,q_n q1,q2,q3,...,qn, 这些单位正交向量构成了 R n R^n Rn的一组标准正交基,且在 q 1 q_1 q1方向上数据的方差是最大的, q 1 q_1 q1就是这些数据的第一个正成分,之后是 q 2 q_2 q2, q 3 q_3 q3

显而易见,上述过程正是我们对矩阵A就行SVD分解的过程,其中的矩阵Q对应了SVD中矩阵V,矩阵 Δ \Delta Δ对应了SVD中的 Σ T Σ \Sigma^T\Sigma ΣTΣ Δ \Delta Δ可能需要乘以n-1才是我们想要的 Σ T Σ \Sigma^T\Sigma ΣTΣ)。但得到 Σ \Sigma Σ和V之后,我们很容易就可以得到矩阵U。

由此可见,我们也可以从式(3)的角度来解释PCA,当 σ i \sigma_i σi满足 σ 1 ≫ σ 2 ≫ . . . ≫ σ r \sigma_1\gg \sigma_2 \gg ...\gg \sigma_r σ1σ2...σr时,显而易见,排在前面的 σ u i v i T \sigma u_iv_i^T σuiviT对A的贡献比较大, 所以我们可以用前几个 σ u i v i T \sigma u_i v_i^T σuiviT的和来近似A,而舍去排在后面 σ u i v i T \sigma u_i v_i^T σuiviT

最后,还需要搞清楚一个问题,那就是为什么PCA有mean-centered的要求,这个问题曾经困扰了我很长时间。

主要原因其实是大家都习惯了用SVD来解决PCA问题,即通过下面这个流程:

Data X → \to Matrix X T X / ( n − 1 X^TX/(n-1 XTX/(n1 → \to 对角化操作。

而这个流程只有当数据X是mean-centered的时候是正确的,因为只有这样, X T X / ( n − 1 ) X^TX/(n-1) XTX/(n1)才和X的协方差矩阵相同。 如果X不是mean-centered,那么这个过程其实只是在求X的SVD分解,而并非求X的PCA。同时,我们也可以这样说只有当X时mean-centered时候,那么求X的SVD和求其PCA是完全相同的。

转自:http://zhangpengfei.tech/2018/11/30/PCA-2018/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值