目录

  • 主要内容
    • EM算法求解
  • 附录
    • 极大似然估计
  • 代码

Tipping M E, Bishop C M. Probabilistic Principal Component Analysis[J]. Journal of The Royal Statistical Society Series B-statistical Methodology, 1999, 61(3): 611-622.

PPCA 通过高斯过程给出了普通PCA一个概率解释,这是很有意义的。论文还利用PPCA进行缺失数据等方面的处理(不过这方面主要归功于高斯过程吧)。

\[ t = Wx + \mu + \epsilon \]
其中\(t \in \mathbb{R}^d\)为观测变量,也就是样本,而\(x \in \mathbb{R}^q\)是隐变量,\(W \in \mathbb{R}^{d \times q}\)将\(x,t\)二者联系起来。另外,\(\epsilon\)是噪声。

令\(S = \frac{1}{N} \sum \limits_{n=1}^N (t_n -\mu )(t_n - \mu)^T\)是样本协方差矩阵,其中\(\mu\)是样本均值。论文的主要工作,就是将\(S\)的列空间和\(W\)联系起来。

主要内容

假设\(\epsilon \sim N(0, \sigma^2 I)\),\(\: x \sim N(0, I)\),二者独立。那么,容易知道\(t\)在\(x\)已知的情况下的条件概率为:
\[ t|x \sim N(Wx + \mu, \sigma^2I) \]
然后论文指出,通过其可求得\(t\)的边际分布:
\[ t \sim N(\mu, C) \]
其中\(C = WW^T + \sigma^2 I\)。这个证明,在贝叶斯优化中有提过,不过我发现,因为\(t=Wx+\mu + \epsilon\),是服从正态分布随机变量的线性组合,所以\(t\)也服从正态分布,所以通过\(E(t)\)和\(E((t-E(t))(t-E(t))^T)\)也可以得到\(t\)的分布。

其似然函数\(L\)为:

将\(W,\sigma\)视为参数,我们可以得到其极大似然估计:

其中\(U_{q}\)的列是\(S\)的主特征向量,而\(\Lambda_q\)的对角线元素为特征向量对应的特征值\(\lambda_1, \ldots, \lambda_q\)(为所有特征值的前\(q\)个,否则\(W\)将成为鞍点),\(R \in \mathbb{R}^{q \times q}\)是一个旋转矩阵。注意到,\(W_{ML}\)的列向量并不一定正交。

这部分的推导见附录。

同样的,我们可以推导出,\(x\)在\(t\)已知的情况下的条件分布:
\[ x|t \sim N(M^{-1}W^T(t-\mu),\sigma^2 M^{-1} \]
其中\(M = W^TW+\sigma^2I\)
这个推导需要利用贝叶斯公式:
\[ p(x|t) = \frac{p(t|x)p(t)}{p(t)} \]

为什么要提及这个东西,因为可以引出一个很有趣的性质,注意到\(x|t\)的均值为:
\[ M^{-1}W^T(t-u) \]
令\(W = W_{ML}\),且假设\(\sigma^2 \rightarrow 0\),那么均值就成为:
\[ (W_{ML}^TW_{ML})^{-1}W_{ML}^T(t-u) \]
实际上就是\((t-u)\)在主成分载荷向量上的正交投影,当然这里不要计较\(W_{ML}^TW_{ML}\)是否可逆。这就又将PPCA与普通的PCA联系在了一起。

EM算法求解

论文给出了\(W\)的显式解(虽然有点地方不是很明白),也给出了如何利用EM算法来求解。

构造似然估计:

对\(x_n\)求条件期望(条件概率为\(p(x_n|t_n,W,\sigma^2)\)):

\(M\)步是对上述\(W,\sigma\)求极大值,注意\(<\cdot>\)里面的\(M, \sigma\)是已知的(实际上,用\(M', \sigma'\)来表述更加合适):

有更加简练的表述形式:

符号虽然多,但是推导并不麻烦,自己推导的时候并没有花多大工夫。

附录

极大似然估计

已知对数似然函数为:

先考察对\(W\)的微分:
\[ \begin{array}{ll} \mathrm{d}L = -\frac{N}{2}\{\frac{\mathrm{d}|C|}{|C|} + \mathrm{dtr}(C^{-1}S)\} \end{array} \]
\[ \begin{array}{ll} \frac{\mathrm{d}|C|}{|C|} &= \mathrm{tr}(C^{-1}\mathrm{d}C) \\ &= \mathrm{tr}[C^{-1}(\mathrm{d}WW^T+W\mathrm{d}W^T)] \\ &= 2\mathrm{tr}[W^TC^{-1}\mathrm{d}W] \\ \end{array} \]
\[ \begin{array}{ll} \mathrm{dtr}(C^{-1}S) &= \mathrm{tr}(\mathrm{d}C^{-1}S) \\ &= -\mathrm{tr}(C^{-1}[\mathrm{d}C]C^{-1}S) \\ &= -\mathrm{tr}(C^{-1}SC^{-1}\mathrm{d}C) \\ &= -2\mathrm{tr}(W^TC^{-1}SC^{-1}\mathrm{d}W) \\ \end{array} \]
所以,要想取得极值,需满足:
\[ C^{-1}W = C^{-1}SC^{-1}W \\ \Rightarrow \quad SC^{-1}W=W \]

论文说这个方程有三种解:

  1. \(W=0\),0解,此时对数似然函数取得最小值(虽然我没看出来)。
  2. \(C=S\):
    \[ WW^T + \sigma^2 I = S \\ \Rightarrow WW^T = S-\sigma^2 \]
    其解为:
    \[ W = U_{S} (\Lambda_S-\sigma^2I)^{1/2}R \]
    其中\(S = U_S \Lambda U_S^T\)。

  3. 第三种,也是最有趣的解,\(SC^{-1}W=W\)但是\(W \ne 0, C \ne S\)。假设\(W=ULV^T\),其中\(U \in \mathbb{R}^{d \times q}\), \(L \in \mathbb{R}^{q \times q}\)为对角矩阵,\(V \in \mathbb{R}^{q \times q}\)。通过一系列的变换(我没有把握能完成这部分证明,感觉好像是对的),可以得到:
    \[ SUL = U(\sigma^2L+L^2)L \]
    于是\(Su_j = (\sigma^2I + l_j^2)u_j\),其中\(u_j\)为\(U\)的第j列,\(l_j\)为\(L\)的第j个对角线元素。因此,\(u_j\)就成了\(S\)的对应特征值\(\lambda_j = \sigma^2 + l_j^2\)的特征向量(注意到这个特征值是必须大于等于\(\sigma^2\))。于是,有:
    \[ W = U_q(K_q-\sigma^2I)^{1/2}R \]
    其中:
    \[ k_j = \left \{ \begin{array}{ll} \lambda_j & 对应特征值u_j \\ \sigma^2 \end{array} \right . \]
    实际上就是\(k_j=\lambda_j\)

注意,上面的分析只能说明其为驻定解,事实上\(U_q\)只说明了其为\(S\)的特征向量,而没有限定是哪些特征向量。

将解\(W = U_q(K_q-\sigma^2I)^{1/2}R\)代入对数似然函数可得(\(C = WW^T+\sigma^2 I\)):

其中\(q'\)是非零\(l_1,\ldots,l_{q'}\)的个数。
上面的是蛮好证明的,注意\(\{\cdot\}\)中第2项和第4项和为\(\ln |C|\),第3,5项构成\(\mathrm{tr}(C^{-1}S)\)。
对\(\sigma\)求极值,可得:

且是极大值,因为显然\(\sigma \rightarrow 0\)会导致\(L \rightarrow - \infty\)。代入原式可得:

最大化上式等价于最小化下式:

注意到,上式只与被舍弃的\(l_j=0\)的\(\lambda_j\)有关,又\(\lambda_i \ge \sigma^2, i=1,\ldots, q\),再结合(18),可以知道最小的特征值一定是被舍弃的。但是论文说,应当是最小的\(d-q'\)个特征值作为被舍弃的(因为这些特征值必须在一块?)。

仔细想来,似然函数可以写成:
\[ L = -\frac{N}{2} \{d \ln (2\pi) + \sum \limits_{j=1}^q \ln (\lambda_j) + \frac{1}{\sigma^2}\sum \limits_{j=q+1}^d \lambda_j + (d-q)\ln (\sigma^2) + q\} \]

好吧,还是不知道该如何证明。

代码

"""
瞎写的,测试结果很诡异啊
"""
import numpy as npclass PPCA:def __init__(self, data, q):self.__data = np.array(data, dtype=float)self.__n, self.__p = data.shapeself.__mean = np.mean(self.data, 0)self.q = qassert q < self.__p, "Invalid q"@propertydef data(self):return self.__data@propertydef n(self):return self.__n@propertydef p(self):return self.__pdef explicit(self):data = self.data - self.__meanS = data.T @ data / self.nvalue, vector = np.linalg.eig(S)U = vector[:, :self.q]sigma = np.mean(value[self.q:])newvalue = value[:self.q] - sigmareturn U * newvaluedef EM(self):data = self.data - self.__meanS = data.T @ data / self.nW_old = np.random.randn(self.p, self.q)sigma = np.random.randn()count = 0while True:count += 1M = W_old.T @ W_old + sigmaM_inv = np.linalg.inv(M)W_new = S @ W_old @ np.linalg.inv(sigma + M_inv @ W_old.T @ S @ W_old)sigma_new = np.trace(S - S @ W_old @ M_inv @ W_new.T) / self.pif np.sum(np.abs(W_new - W_old)) / np.sum(np.abs(W_old)) < 1e-13 and \np.abs(sigma_new - sigma) < 1e-13:return W_newelse:W_old = W_newsigma = sigma_new

转载于:https://www.cnblogs.com/MTandHJ/p/10795355.html

Probabilistic Principal Component Analysis相关推荐

  1. PCA(Principal Component Analysis)的原理、算法步骤和实现。

    PCA的原理介绍:  PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分 ...

  2. 机器学习与高维信息检索 - Note 7 - 核主成分分析(Kernel Principal Component Analysis,K-PCA)

    Note 7 - 核主成分分析(Kernel Principal Component Analysis) 核主成分分析 Note 7 - 核主成分分析(Kernel Principal Compone ...

  3. 机器学习与高维信息检索 - Note 4 - 主成分分析及其现代解释(Principal Component Analysis, PCA)及相关实例

    主成分分析及其现代解释 4. 主成分分析及其现代解释 Principal Component Analysis and Its Modern Interpretations 4.1 几何学解释 The ...

  4. PCA(principal component analysis)主成分分析降维和KPCA(kernel principal component analysis​​​​​​​)核

    PCA(principal component analysis)主成分分析降维和KPCA(kernel principal component analysis)核主成分分析降维方法详解及实战 PC ...

  5. pca主成分分析结果解释_SKLEARN中的PCA(Principal Component Analysis)主成分分析法

    PCA(Principal Component Analysis)主成分分析法是机器学习中非常重要的方法,主要作用有降维和可视化.PCA的过程除了背后深刻的数学意义外,也有深刻的思路和方法. 1. 准 ...

  6. Machine Learning week 8 quiz: Principal Component Analysis

    Principal Component Analysis 5 试题 1. Consider the following 2D dataset: Which of the following figur ...

  7. 笔记:Online robust principal component analysis via truncated nuclear norm regularization

    Hong, B., Wei, L., Hu, Y., Cai, D., & He, X. (2016). Online robust principal component analysis ...

  8. Robust principal component analysis?(RPCA简单理解)

    参考文献:Candès, E.J., Li, X., Ma, Y., and Wright, J.: 'Robust principal component analysis?', J. ACM, 2 ...

  9. Sparse Principal Component Analysis via Rotation and Truncation

    目录 对以往一些SPCA算法复杂度的总结 Notation 论文概述 原始问题 问题的变种 算法 固定\(X\),计算\(R\) 固定\(R\),求解\(X\) (\(Z =VR^{\mathrm{T ...

最新文章

  1. 目标检测算法Faster R-CNN简介
  2. amqp协议_AMQP协议、模型及RabbitMQ常用组件
  3. ADS2017打开出现cannot create the directory,解决办法。
  4. cordova自定义android插件,Cordova 自定义插件(Android版本)
  5. Cookie 与Session 的区别
  6. FreeBSD9.1安装Gnome2桌面
  7. 如何取消IntelliJ IDEA打开默认项目配置
  8. matlab怎么没有编辑器,实时编辑器介绍 - MATLAB Simulink - MathWorks 中国
  9. php.ini – 配置文件详解
  10. java in list,Java 8流过滤:IN子句
  11. Python 定时器制作
  12. 【js练习】鼠标按下和松开事件
  13. golang正则匹配中文字符,查询中文字符会panic退出的问题
  14. Tomcat SSL配置 Connector attribute SSLCertificateFile must be defined when using SSL with APR解决 作者:孤风一
  15. 蜡笔小新钢达姆机器人_《蜡笔小新》当中出现的组合,小伙伴们最喜欢谁?
  16. word文档正文页码从1开始
  17. 可道云需要配置MySQL吗_可道云kodexplorer搭建私有云后的配置优化
  18. Java笔试 系列一
  19. 千万年斗转星移,小屏幕见大宇宙 - “钦天明时” 天文时钟万年历应用程序(iOS App)说明
  20. Java直接量(字面量)

热门文章

  1. 数据结构与算法—图论之dfs、bfs(深度优先搜索、宽度优先搜索)
  2. JSunpack-n模拟WireShark拦截文件传输
  3. 精通java图片_面试必备:详解Java I/O流,掌握这些就可以说精通了?
  4. CCNP实验【静态出接口配置】
  5. c# 数组中的空值_译 | 你到底有多精通 C# ?
  6. 阿里云 VPC 内网性能测试最佳实践
  7. 打造数字化服务能力,中国联通如何借助云原生技术实现增长突围?
  8. OpenYurt 开源 | 云原生生态周报 Vol. 51
  9. 如何添加java环境变量_如何配置java环境变量
  10. string截取某个字符串之前的_python String字符串操作