SPCArt算法,利用旋转(正交变换更为恰当,因为没有体现出旋转这个过程),交替迭代求解sparse PCA。

对以往一些SPCA算法复杂度的总结



注:\(r\)是选取的主成分数目,\(m\)为迭代次数,\(p\)为样本维度,\(n\)为样本数目。本文算法,需要先进行SVD,并未在上表中给出。

Notation

论文概述

\(A = U\Sigma V^{\mathrm{T}}\)

\(V_{1:r}=[V_1,V_2,\ldots, V_r] \in \mathbb{R}^{p\times r}\)就是普通PCA的前\(r\)个载荷向量(loadings,按照特征值降序排列)

\(\forall 旋转矩阵(正交矩阵)R \in \mathbb{R}^{r \times r}\)

\(V_{1:r}R\)也是彼此正交的,张成同一子空间的向量组。

原始问题



如果能解出来,当然好,可是这是一个很难求解的问题,所以需要改进。

问题的变种

\(V_{1:r}\)直接用\(V\)表示了,为了符号的简洁。



变成这个问题之后,我们所追求的便是\(X\)了,\(X_i\),就是我们要的载荷向量,显然,这个问题所传达出来的含义是:

1.我们希望\(XR\)与\(V\)相差不大,意味着\(X_i\)近似正交且张成同一个子空间。

2.\(\|X_i\|_1\)作为惩罚项,可以起到稀疏化的作用(这是1-范数的特点)。

算法



这是一个交替迭代算法,我们来分别讨论。

固定\(X\),计算\(R\)

当固定\(X\),之后,问题就退化为:



这个问题在Sparse Principal Component Analysis(Zou 06)这篇论文里面也有提到。

上述最小化问题,可以变换为

\(max \quad tr(V^{\mathrm{T}}XR), \quad s.t. \quad R^{\mathrm{T}}R=I\)

若\(X^{\mathrm{T}}V=WDQ^{\mathrm{T}}\)

就是要最大化:

\(tr(QDW^{\mathrm{T}}R)=tr(DW^{\mathrm{T}}RQ)\leq tr(D)\)

当\(R = WQ^{\mathrm{T}}\)(注意\(W^{\mathrm{T}}RQ\)是正交矩阵)。

固定\(R\),求解\(X\) (\(Z =VR^{\mathrm{T}}\))

1-范数



注意:\(\|VR^{\mathrm{T}}-X\|_F^2=\|(V-XR)R^{\mathrm{T}}\|_F^2\),所以这个问题和原始问题是等价的。

经过转换,上述问题还等价于:

\(max_{X_i} \quad Z_i^{\mathrm{T}}X_i-\lambda\|X_i\|_1 \quad i=1,2,\ldots,r\)

通过分析(蛮简单的,但是不好表述),可以得到:

\(X_i^*=S_\lambda(Z_i)/\|S_\lambda(Z_i)\|_2\)

\(T-\ell_0\)(新的初始问题)



\(R\)的求解问题没有变化,考虑\(R\)固定的时候,求解\(X\)。

等价于:

\(\mathop{min}\limits_{X_{ij},Z_{ij}} \quad (Z_{ij}-X_{ij})^2+\lambda^2\|X_{ij}\|_0\)

显然,若\(X_{ij}^* \neq 0\),\(X_{ij}^*=Z_{ij}\),此时函数值为\(\lambda^2\)

若\(X_{ij}^* = 0\),值为\(Z_{ij}^2\),所以,为了最小化值,取:

\(min \{Z_{ij}^2,\lambda^2\}\),也就是说,

\(X_{ij}=0 \quad if\:Z_{ij}^2>\lambda^2\) 否则, \(X_{ij}=Z_{ij}\)

\(X_i^*=H_\lambda(Z_i)/\|H_\lambda(Z_i)\|_2\)

T-sp 考虑稀疏度的初始问题



\(\lambda \in \{0, 1, 2,\ldots,p-1\}\)

\(R\)的求法如出一辙,依旧只需考虑在\(R\)固定的情况下,如何求解\(X\)的情况。

等价于:

\(max \quad Z_i^{\mathrm{T}}X_i\) 在条件不变的情况下。

证明挺简单的,但不好表述,就此别过吧。

最优解是:\(X_i^*=P_\lambda(Z_i)/\|P_\lambda(Z_i)\|_2\)

T-en 考虑Energy的问题

\(X_i = E_\lambda(Z_i)/\|E_\lambda(Z_i)\|_2\)

文章到此并没有结束,还提及了一些衡量算法优劣的指标,但是这里就不提了。大体的思想就在上面,我认为这篇论文好在,能够把各种截断方法和实际优化问题结合在一起,很不错。

代码

def Compute_R(X, V):

    W, D, Q_T = np.linalg.svd(X.T @ V)

    return W @ Q_T

def T_S(V, R, k): #k in [0,1)

    Z = V @ R.T
sign = np.where(Z < 0, -1, 1)
truncate = np.where(np.abs(Z) - k < 0, 0, np.abs(Z) - k)
X = sign * truncate
X = X / np.sqrt((np.sum(X ** 2, 0))) return X def T_H(V, R, k): #k in [0,1) 没有测试过这个函数 Z = V @ R.T
X = np.where(np.abs(Z) > k, Z, 0)
X = X / np.sqrt((np.sum(X ** 2, 0))) return X def T_P(V, R, k): #k belongs to {0, 1, 2, ..., (p-1)} 没有测试过这个函数 Z = V @ R.T
Z[np.argsort(np.abs(Z), 0)[:k], np.arange(Z.shape[1])] = 0
X = Z / np.sqrt((np.sum(Z ** 2, 0))) return X def Main(C, r, Max_iter, k): #用T_S截断 可以用F范数判断是否收敛,为了简单直接限定次数 value, V_T = np.linalg.eig(C)
V = V_T[:r].T
R = np.eye(r)
while Max_iter > 0: Max_iter -= 1
X = T_S(V, R, k)
R = Compute_R(X, V) return X.T

结果,稀疏的程度大点,反而效果还好点。

Sparse Principal Component Analysis via Rotation and Truncation的更多相关文章

  1. Sparse Principal Component Analysis

    目录 背景: 部分符号 创新点 文章梗概 The LASSO AND THE ELASTIC NET 将PCA改造为回归问题 定理二 单个向量(无需进行SVD版本) 定理三 多个向量(无需进行SVD, ...

  2. Full Regularization Path for Sparse Principal Component Analysis

    目录 背景 Notation Sparse PCA Semidefinite Relaxation Low Rank Optimization Sorting and Thresholding 背景 ...

  3. Generalized Power Method for Sparse Principal Component Analysis

    目录 重点 算法 这篇文章,看的晕晕的,但是被引用了400多次了,就简单地记一笔. 这个东西,因为\(\ell_1\)范数,所以会稀疏化,当然,和\(\gamma\)有关. 重点 我想重点写的地方是下 ...

  4. Sparse Principal Component Analysis via Regularized Low Rank Matrix Approximation(Adjusted Variance)

    目录 前言 文章概述 固定\(\widetilde{\mathrm{v}}\) 固定\(\widetilde{\mathrm{u}}\) Adjusted Variance 前言 这篇文章用的也是交替 ...

  5. Principal Component Analysis(PCA) algorithm summary

    Principal Component Analysis(PCA) algorithm summary mean normalization(ensure every feature has sero ...

  6. Robust Principal Component Analysis?(PCP)

    目录 引 一些微弱的假设: 问题的解决 理论 去随机 Dual Certificates(对偶保证?) Golfing Scheme 数值实验 代码 Candes E J, Li X, Ma Y, e ...

  7. 《principal component analysis based cataract grading and classification》学习笔记

    Abstract A cataract is lens opacification caused by protein denaturation which leads to a decrease i ...

  8. PCA(Principal Component Analysis)主成分分析

    PCA的数学原理(非常值得阅读)!!!!   PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可 ...

  9. Principal Component Analysis(PCA)

    Principal Component Analysis(PCA) 概念 去中心化(零均值化): 将输入的特征减去特征的均值, 相当于特征进行了平移, \[x_j - \bar x_j\] 归一化(标 ...

随机推荐

  1. xpath语法大全

    XPath 节点 XPath 术语 节点 在 XPath 中,有七种类型的节点:元素.属性.文本.命名空间.处理指令.注释以及文档(根)节点.XML 文档是被作为节点树来对待的.树的根被称为文档节点或 ...

  2. c/c++ 模板与STL小例子系列<三> traits

    c/c++ 模板与STL小例子系列 traits 对这个概念,还是处于懵逼的状态,初步体会就是,为了解决类型之间的转换问题. 从一个类型为A的指针,转化到类型为B的指针,中间需要用void*来作为中介 ...

  3. 在Lua中提示UnityEngine.dll的方法

    我的环境 安装最新的 EmmyLua-1.2.1及以上版本 IDEA 2017.1.2 及以上版本 关于EmmlyLua的介绍可查看我之前的文章:Lua代码提示和方法跳转 说明:本文方法摘自 Emmy ...

  4. Java监控类库Metrics

    Gauge含义:瞬时值值类型:不限 Counter:作用:可以insr, decr 的计数器值类型:数字 Histogram:含义:maximum, mean, etc., it also measu ...

  5. 《生命》第四集:Fish (鱼类)

    旗鱼,是游动最快的鱼,他们不仅速度快,背上的鱼鳍还能吓唬成群的沙丁鱼,他们依靠速度与技巧结队捕食. 飞鱼,继续讲述了一下,飞鱼可以飞起来,把捕食者远远甩掉:飞鱼保护后代的方式是把卵产在水中的树叶上,很 ...

  6. Nginx使用教程(四):提高Nginx网络吞吐量之buffers优化

    请求缓冲区在NGINX请求处理中起着重要作用. 在接收到请求时,NGINX将其写入这些缓冲区. 这些缓冲区中的数据可作为NGINX变量使用,例如$request_body. 如果缓冲区与请求大小相比较 ...

  7. Ajax的beforeSend

    巧用Ajax的beforeSend 提高用户体验 jQuery是经常使用的一个开源js框架,其中的$.ajax请求中有一个beforeSend方法,用于在向服务器发送请求前执行一些动作.具体可参考jQ ...

  8. ES5-ES6-ES7_严格模式

    运行模式 正常(混杂)模式与严格模式,除了正常运行模式(混杂模式),ES5添加了第二种运行模式:"严格模式"(strict mode) 顾名思义,这种模式使得Javascript在 ...

  9. Git 安装及用法 github 代码发布 gitlab私有仓库的搭建

    版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 这个版本控制软件,有 svn还有git,是一个工具. git是由linux的作者开发的 git是一个分布式版本控制系统 ...

  10. 关于HashMap的一些深入探索与理解

    在java中.大家差点儿是离不开对集合的使用的,像Map系列,List系列.Set系列.可是非常多人没有了解过或者研究过这些集合类究竟能够用在什么地方,而且有什么注意的地方.因此本文分Map系列和Li ...