从主坐标分析(PCO)到kernel PCA

  • Principal coordinate analysis

 PCA是一种经典的降维方法,相信大家都很熟悉PCA的原理了,PCO其实只是PCA换一种角度来做,都是在做奇异值分解。PCA做法:原始数据矩阵 XX\in R^{n\times p}, 先做中心化处理得到 \bar{X},计算方差矩阵 S=\bar{X}^{T}\bar{X},然后计算 S 的最大 q 个特征值对应的特征向量,然后和原始特征相乘,即得到降维的结果。为了更清楚的显示它的本质,将这个过程表示成矩阵。

        将 X 中心化表示成矩阵的形式, I_{n} 表示单位矩阵,1_{n} 表示全1 的n 维列向量: \bar{X}=(I_{_{n}}-1/n1_{n}1_{n}^{T})X

记   H=(I_{_{n}}-1/n1_{n}1_{n}^{T}) ,  我们称之为中心矩阵,它的本质就是对数据做中心化处理,即数据矩阵,减去均值矩阵。它有一个很好的性质就是H^{n}=H,即它是等幂的,可以手动验证一下。那么我们终于可以得到方差矩阵理想的形式了。 S=\bar{X}^{T}\bar{X}=X^{T}HHX=X^{T}HX,希望大家没有晕。PCA其实就是在对X^{T}HHX 操作。好,重点来了,PCO马上就呼之欲出了,它就是,是是是真的是,对HXX^{T}H求特征值,然后就可以直接得到降维结果了,连和数据矩阵相乘都不需要。下面来证明这一点。

       假设 ABx=\lambda x, 那么 BABx=\lambda Bx,即BAAB 的特征值一样,特征向量之间存在一定的关系,后面的kernel pca还要要用到这个关系。我们把X^{T}H看作A, 把HX看作B。原来我们做pca时是求出 q 个特征向量之后,将其排成矩阵 G_{q}, 然后 HXG_{k} 就是我们的结果。现在由于X^{T}HHXHXX^{T}H的特征值之间存在一定的关系,所以如果 G_{q}是 原来方差矩阵的特征值,那么HXX^{T}H的特征值就是HXG_{k},这说明直接对HXX^{T}H求特征值就得到了pca的结果,这样是不是就直接得到了结果,有没有很神奇呢?这里本质上就是对HXX^{T}HX^{T}HHX做奇异值分解,奇异值是一样的。还没有结束,我们还需要对HXX^{T}H的特征值做归一化处理,这里不是归一化到1,我们记HXX^{T}H的特征值为 z_{i}, 要让 z_{i}^{T}z_{i}=\lambda _{i},  \lambda _{i} 是对应的第 i 个特征值。我们再来总结一下PCO的做法:

        记 T=HXX^{T}H,令 z_{i} 是 T 的第i 个特征值,即 Tz_{i}=\lambda _{i}z_{i} ,对其做归一化处理,z_{i}^{T}z_{i}=\lambda _{i}i=1.....q,那么Z=(z_{1},...z_{q})就是Xq维空间的principal coordinates。

       注意上面HXX^{T}H矩阵中存在XX^{T},XX^{T}是样本之间的内积,可以看作是一个线性核的核矩阵,是不是马上就感觉可以用强大的kernel方法呢,kernel函数本质上是某个高维空间的内积,如果我们将上面的数据矩阵内积XX^{T}用kernel矩阵代替,是不是就可以看作是在某个高维空间进行pca处理呢,因此kernel pca 也呼之欲出了,鼓掌...。kernel方法只需要提供kernel就行了,并不需要直接用到低维空间特征在高维空间的表示。下面来介绍一波kernel pca。

  • Kernel PCA

       假设高维空间特征矩阵为F,kernel 矩阵K=FF^{T},注意这里只是假定高维空间矩阵F,它的形式我们根本不需要知道。那么现在是对F来做PCA,但是我们根本就不知道 F 是什么,因此方差矩阵F^{T}HF没办法来求,但是,还记得前面PCO的做法吗,做不了F^{T}HF,我们可以来做HFF^{T}H啊,而FF^{T}是已知的,就是kernel 矩阵K,到这里,是不是就一下子光明起来了呢?

F^{T}HHFF^{T}Hv=\lambda F^{T}Hv, 即F^{T}HHF对应特征值为\lambda的特征向量是F^{T}Hv,做归一化处理,  

                                                                u=\frac{F^{T}Hv}{||v^{T}HFF^{T}Hv||}_{2}=\lambda ^{-1/2}F^{T}Hv

这就是pca降维时要用到的特征向量,当对一个高维空间特征 f 进行降维时,首先减去均值,f-1/nF^{T}1_{n},然后乘u,

得到投影 :y=(f-1/nF^{T}1n)^{T}\lambda ^{-1/2}F^{T}Hv=\lambda ^{-1/2}f^{T}F^{T}Hv-1/nln^{T}FF^{T}Hvf^{T}F^{T}f 与F中每一个特征的内积,可以利用核函数求出来,而FF^{T}就是kernel K,是已知的,因此整个结果也就可以求出来的,这就是kernel pca, 这个过程中尽管我们用到了 f,F ,但我们不需要具体知道它们是什么,只需要一个核函数就行了,这样就等价于在一个高维空间做了pca降维。

       最后来一个总结,pca利用方差矩阵X^{T}HX求得特征值,pco利用HXX^{T}H直接可以得到降维结果,因为它们的特征值相同,特征向量存在对应关系,而kpca是在变换后的高维特征空间进行pca,即需要求得F^{T}HF的特征值,然而我们不知道F 的具体形式,从而借助HFF^{T}H 来求特征值,做到最后,只需要核矩阵,就可以完成在高维空间的降维。

 

 

 

      

 

 

 

你可能感兴趣的:(ML理论,ML算法)