Sparse PCA: reproduction of the synthetic example

The paper:

Hui Zou, Trevor Hastie, and Robert Tibshirani,

Sparse Principal Component Analysis,

Journal of computational and Graphical Statistics, 15(2): 265-286, 2006.

Reproduction of the Synthetic Example in Section 5.2 using R programming:

 1 library(elasticnet)
 2
 3 ## sample version of SPCA
 4 n = 1000
 5 v1 = rnorm(n,0,sqrt(290))
 6 v2 = rnorm(n,0,sqrt(300))
 7 v3 = -.3*v1 + 0.925*v2 + rnorm(n)
 8 x1 = v1 + rnorm(n)
 9 x2 = v1 + rnorm(n)
10 x3 = v1 + rnorm(n)
11 x4 = v1 + rnorm(n)
12
13 x5 = v2 + rnorm(n)
14 x6 = v2 + rnorm(n)
15 x7 = v2 + rnorm(n)
16 x8 = v2 + rnorm(n)
17
18 x9 = v3 + rnorm(n)
19 x10 = v3 + rnorm(n)
20
21 x = cbind(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)
22 x.cov = t(x) %*% x/n; head(x.cov)
23 a = spca(x, 2, type=‘predictor‘, sparse=‘varnum‘, para=c(4,4), lambda=0)
24 a
25 ## population version of SPCA
26 g1 = matrix(290, 4, 4)
27 diag(g1) = 291
28
29 g2 = matrix(300, 4, 4)
30 diag(g2) = 301
31
32 g3 = matrix(283.7875, 2, 2)
33 diag(g3) = diag(g3)+1
34
35
36 g1g3 = matrix(-87, 4, 2)
37 g2g3 = matrix(277.5, 4, 2)
38
39 # construct the exact covariance matrix
40 x.cov = matrix(0, 10, 10)
41 x.cov[1:4,1:4] = g1
42 x.cov[5:8,5:8] = g2
43 x.cov[9:10,9:10] = g3
44 x.cov[1:4,9:10] = g1g3
45 x.cov[9:10,1:4] = t(g1g3)
46 x.cov[5:8,9:10] = g2g3
47 x.cov[9:10,5:8] = t(g2g3)
48
49
50 b = spca(x.cov, 2, type=‘Gram‘, sparse=‘varnum‘, para=c(4,4), lambda=0)
51 b

The results of the population version using exact covariance matrix are exactly as in the paper:

> b

Call:
spca(x = x.cov, K = 2, para = c(4, 4), type = "Gram", sparse = "varnum",
    lambda = 0)

2 sparse PCs
Pct. of exp. var. : 40.9 39.5
Num. of non-zero loadings :  4 4
Sparse loadings
      PC1 PC2
 [1,] 0.0 0.5
 [2,] 0.0 0.5
 [3,] 0.0 0.5
 [4,] 0.0 0.5
 [5,] 0.5 0.0
 [6,] 0.5 0.0
 [7,] 0.5 0.0
 [8,] 0.5 0.0
 [9,] 0.0 0.0
[10,] 0.0 0.0

But the sample version may randomly vary a little.

> a

Call:
spca(x = x, K = 2, para = c(4, 4), type = "predictor", sparse = "varnum",
    lambda = 0)

2 sparse PCs
Pct. of exp. var. : 37.9 37.6
Num. of non-zero loadings :  4 4
Sparse loadings
       PC1    PC2
x1   0.000 -0.303
x2   0.000 -0.533
x3   0.000 -0.576
x4   0.000 -0.540
x5  -0.492  0.000
x6  -0.287  0.000
x7  -0.481  0.000
x8  -0.666  0.000
x9   0.000  0.000
x10  0.000  0.000

Having fun learning sparse PCA!

时间: 2024-10-12 21:07:48

Sparse PCA: reproduction of the synthetic example的相关文章

Sparse PCA 稀疏主成分分析

Sparse PCA 稀疏主成分分析 2016-12-06 16:58:38 qilin2016 阅读数 15677 文章标签: 统计学习算法 更多 分类专栏: Machine Learning 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/zhoudi2010/article/details/53489319 SPCA原始文献:H. Zou (2006) Sparse principa

主成分分析(PCA)原理总结

主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一.在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用.一般我们提到降维最容易想到的算法就是PCA,下面我们就对PCA的原理做一个总结. 1. PCA的思想 PCA顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据.具体的,假如我们的数据集是n维的,共有m个数据$(x^{(1)},x^{(2)},...,x^{(m)})$.我们希望将这m个数据的维度从n维降到n'维

【机器学习】Sklearn库主成分分析PCA降维的运用实战

1.PCA分类介绍 在scikit-learn中,与PCA相关的类都在sklearn.decomposition包中.最常用的PCA类就是sklearn.decomposition.PCA. 原理:线性映射(或线性变换),简单的来说就是将高维空间数据投影到低维空间上,那么在数据分析上,我们是将数据的主成分(包含信息量大的维度)保留下来,忽略掉对数据描述不重要的成分.即将主成分维度组成的向量空间作为低维空间,将高维数据投影到这个空间上就完成了降维的工作. 除了PCA类以外,最常用的PCA相关类还有

05-03 主成分分析(PCA)

目录 主成分分析(PCA) 一.维数灾难和降维 二.主成分分析学习目标 三.主成分分析详解 3.1 主成分分析两个条件 3.2 基于最近重构性推导PCA 3.2.1 主成分分析目标函数 3.2.2 主成分分析目标函数优化 3.3 基于最大可分性推导PCA 3.4 核主成分分析(KPCA) 四.主成分分析流程 4.1 输入 4.2 输出 4.3 流程 五.主成分分析优缺点 5.1 优点 5.2 缺点 六.小结 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工

paper 15 :整理的CV代码合集

这篇blog,原来是西弗吉利亚大学的Li xin整理的,CV代码相当的全,不知道要经过多长时间的积累才会有这么丰富的资源,在此谢谢LI Xin .我现在分享给大家,希望可以共同进步!还有,我需要说一下,不管你的理论有多么漂亮,不管你有多聪明,如果没有实验来证明,那么都是错误的.  OK~本博文未经允许,禁止转载哦!  By  wei shen Reproducible Research in Computational Science “It doesn't matter how beautif

Machine and Deep Learning with Python

Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstitions cheat sheet Introduction to Deep Learning with Python How to implement a neural network How to build and run your first deep learning network Neur

Awesome Machine Learning

Awesome Machine Learning  A curated list of awesome machine learning frameworks, libraries and software (by language). Inspired by awesome-php. If you want to contribute to this list (please do), send me a pull request or contact me @josephmisiti Als

舆情,文本挖掘

MLE,MAP,EM 和 point estimation 之间的关系是怎样的 和点估计相对应的是区间估计,这个一般入门的统计教材里都会讲.直观说,点估计一般就是要找概率密度曲线上值最大的那个点,区间估计则要寻找该曲线上满足某种条件的一个曲线段. 最大似然和最大后验是最常用的两种点估计方法.以最简单的扔硬币游戏为例,一枚硬币扔了五次,有一次是正面.用最大似然估计,就是以这五次结果为依据,判断这枚硬币每次落地时正面朝上的概率(期望值)是多少时,最有可能得到四次反面一次正面的结果.不难计算得到期望概

运动目标跟踪(十八)--阶段性总结

经过近两周的学习,对目前了解到的几个跟踪算法,做下相关总结对比. 贝叶斯框架:       STC跟踪器:是一个简单快速而且鲁棒的算法,它利用稠密的空时场景模型来进行跟踪.在贝叶斯框架下,它利用目标和目标局部的稠密信息的空时关系来建模.置信图在被计算时考虑了上一帧目标的位置的先验信息,这有效的减轻了目标位置的模糊.STC跟踪器使用了最简单的灰度特征,但是灰度并不能很好对外观进行描述.这里可以改进为其他比较好的特征(Color name或者Hog),但是就会遇到多通道特征融合的问题.一般的Trac