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. [20181015]为什么是3秒.txt

    [20181015]为什么是3秒.txt --//以前测试:连接http://blog.itpub.net/267265/viewspace-2144765/=>为什么是12秒.txt.--// ...

  2. C#核心基础--类的声明

    C#核心基础--类的声明 类是使用关键字 class 声明的,如下面的示例所示: 访问修饰符 class 类名 { //类成员: // Methods, properties, fields, eve ...

  3. 阿里云windows2012+iis8配置https

    第一步先创建一个免费的证书 步骤一:申请免费证书 步骤二:填写你的二级域 步骤三:等待审核通过,通过后,点击下载 步骤四:根据自己服务器类型,下载对应的证书,根据阿里云的安装步骤做 以下是阿里云提供的 ...

  4. 下载Eclipse、下载Java各个版本,来这里就对了

    Eclipse官网:http://www.eclipse.org/ 不信你去看看 Java官网:https://www.java.com/ 不信你去看看 可惜是,每次进入官网提示都是下面这样的:来,我 ...

  5. Spring的AOP基于AspectJ的注解方式开发1

    参考自黑马培训机构 创建项目,引入jar包 编写目标类,切面类并完成配置 package spring.day2_aop2; /* * 编写目标类 */ public class OrderDao { ...

  6. linux学习笔记整理(七)

    第八章 Centos7软件包的管理与安装本节所讲内容:8.1 使用rpm命令-安装-查看-卸载-rpm软件包8.2 yum管理软件包8.3 实战tar源码包管理-srpm源码包安装方法 8.1 软件包 ...

  7. centos7下安装docker(17.3docker监控---cAdvisor)

    cAdvisor是google开发的容器监控工具 1.在host上运行cadvisor容器 docker run -d -p 8080:8080 --name cadvisor -v /:/rootf ...

  8. BZOJ5197:[CERC2017]Gambling Guide(最短路,期望DP)

    Description 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易 ...

  9. 第10章 RDB持久化

    Redis是一种内存数据库,掉电即失,为了解决这个问题Redis提供了RDB持久化功能,该功能可以把Redis中的内容以RDB文件的形式存储在硬盘上,并且每次RedisServer启动的时候都会尝试从 ...

  10. ActiveMQ 控制台使用方法

    一.为什么使用ActiveMQ 在总线的设计中可能会使用到JMS(Java Message Service)通道, Java消息服务(JMS)超越了生产商专有的MOM(Message-Oriented ...