probability principal component analysis

      PCA很有用,可以降维,也很好理解。但是有弱点不能设置参数,数据之间的某些特征也会被剔除。在PCA的基础上,有人提出了probability principal component analysis,简称pPCA。pPCA与高斯分布密切相关。所以先理解一下高斯分布。

高斯分布:

      一维的高斯分布很容易理解。这里说的Multivariate normal distribution。简单来是多维高斯分布的PDF可以表示为: f(\mathbf{x})= \frac{1}{\sqrt { (2\pi)^k|\boldsymbol \Sigma| } } \exp\left(-{1 \over 2} (\mathbf{x}-\boldsymbol\mu)^{\rm T} \boldsymbol\Sigma^{-1} ({\mathbf x}-\boldsymbol\mu)\right)其中\Sigma为协方差矩阵,因此是对称的。\mu是均值。为了直观一点,可以画出二维的图。如下。各个图的意义见参数,可以看到\Sigma\mu起到的作用。

normal distribution
normal distribution

normal distribution
normal distribution 2d

PPCA:

      PPCA的主要问题是把x转换为\mathbf{x }= \mathbf{Wz} + \mathbf{\mu} + \sigma\mathbf{\epsilon},其中x是p维的数据,z是q维向量(q<p),并且\mathbf{z} \sim N(\mathbf{0,I_p}), \mathbf{\epsilon} \sim N(\mathbf{0,I_q})。(如果不考虑\mathbf{\epsilon}就是普通的PCA,解释见slideshare)。要求就是x的最大似然。表示为

    \[L = \prod_{i=1}^{n} \cfrac{1}{|\mathbf{C}|^{1/2}}exp(-\cfrac{1}{2}(\mathbf{x_i-u})\mathbf{C}^{-1}(\mathbf{x_i-u}))\]

ML = log(L).求ML最大即可。如果光是这样事情就好办了。我们可以根据Estimation of Covariance直接得出C。但这里C是要满足一个条件。C = \mathbf{WW^T} + \sigma^2\mathbf{I_p}为什么C能这样表示,详细见论文。推倒还不是很麻烦。麻烦的是推倒p(z|x-\mu)。这里没有用到这个,在EM算法中会用到,所以先不考虑。

解法:

      解法比较多。最直接的就是求导,分别求出\mathbf{W},\sigma。还有就是EM,比较复杂,但是计算上有优势。可以证明他们等价。具体解法见笔记。最终求得

    \begin{align*} \mathbf{W} &= \mathbf{\Phi_q}(\Gamma_q-\sigma^2\mathbf{I_q})^{1/2}V^T \\ \sigma^2 &= \cfrac{1}{p-q}\sum_{j=q+1}^{p}\mathbf{\Gamma_j}\end{align*}

其中V可以是任意正交矩阵。\cfrac{1}{n}\mathbf{X^THHX}\mathbf{\Phi_q} = \mathbf{\Phi_q\Gamma_q},就是求SVD。

实验:

      实验数据是跟PCA一样的产生方法。代码见github。看了结果,第一感觉就是难以置信。虽然这是假数据。从下图可以看到整个高斯分布基本上覆盖了数据。

ppca_dis
ppca distribution

      来张透明点的,可以看到红色的是原数据。绿色的有z生成。这里我有点不能理解。虽然是把x降维了,但是跟z有什么关系啊。根据z生成出来的数据根本不是x啊。以后再想想。

ppca ppca2

后续:

      PPCA还有EM解法,等我复习了再说。还有Kernel PCA等等。有点牛啊!