您的位置:首页 > 其它

pca 与 spca 在数据压缩方面的对比

2015-06-15 11:15 471 查看
spca即sparse pca,详见Sparse Principal Component Analysis,这篇文章。实现这篇文章的工具箱有 DSPCA 但是这个作者好像现在不继续了,主页上找不到下载链接,现在可以用的是SpaSM 这个toolbox,主页是:http://www2.imm.dtu.dk/projects/spasm/

可以免费下载,matlab的。

里面有一个对比pca,spca表现的测试例子。

n = 1500; p = 500;
t = linspace(0, 1, p);
pc1 = max(0, (t - 0.5)> 0);
pc2 = 0.8*exp(-(t - 0.5).^2/5e-3);
pc3 = 0.4*exp(-(t - 0.15).^2/1e-3) + 0.4*exp(-(t - 0.85).^2/1e-3);
X = [ones(n/3,1)*pc1 + randn(n/3,p); ones(n/3,1)*pc2 + ...
randn(n/3,p); ones(n/3,1)*pc3 + randn(n/3,p)];
% PCA and SPCA
[U D V] = svd(X, 'econ');
d = sqrt(diag(D).^2/n);
[B SD] = spca(X, [], 3, inf, -[250 125 100], 3000, 1e-3, true);
figure(1)
plot(t, [pc1; pc2; pc3]); axis([0 1 -1.2 1.2]);
title('Noiseless data');
figure(2);
plot(t, X);  axis([0 1 -6 6]);
title('Data + noise');
figure(3);
plot(t, d(1:3)*ones(1,p).*(V(:,1:3)'));  axis([0 1 -1.2 1.2]);
title('PCA');
figure(4)
plot(t, sqrt(SD)*ones(1,p).*(B'));  axis([0 1 -1.2 1.2]);
title('SPCA');


下面套用一个实际的例子说明一下,t 可以看成是一系列时间点,pc1,pc2,pc3 可以看成是一个人在t不同时刻时,的x,y,z坐标值,实际位置是唯一的,就是pc1, 1*500,pc2 pc3一样,500个时刻的坐标值,但是进行测量时,使用了500个观测者,n/3的含义,X中前500行是500个观测测对x坐标值的测量,然后是500个y值的测量,500个z值的测量,这些测量必然是有误差的,randn就表示这些误差,即noise, pca和spca在降维的同时,也是降噪,出现的结果分别是:









这里用pca和spca 不是降维的,而且从很多数据中,选出一行最具代表性的一行,是从数据紧致性表达出发的,水平有限,解释的不是很清楚,如果是降维的话,得到的数据应该是,列数变小,行数不变,因为降维就是减小变量的个数,而每列代表一个变量,而行数是观测的个数,这个不降,而现在是列数没有变,行数变了。说明,很多观测都是相关的,取最具代表的几个就可可以表示,原来那么多的观测,这个不能说是降维,可以说是压缩?不确定啊,哪位大牛说明一下就好了。在这篇文章里有讲到数据压缩,太厉害了!

spca 尤其其稀疏性,效果更好一点!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: