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

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 在数据压缩方面的对比_第1张图片 pca 与 spca 在数据压缩方面的对比_第2张图片 pca 与 spca 在数据压缩方面的对比_第3张图片 pca 与 spca 在数据压缩方面的对比_第4张图片
这里用pca和spca 不是降维的,而且从很多数据中,选出一行最具代表性的一行,是从数据紧致性表达出发的,水平有限,解释的不是很清楚,如果是降维的话,得到的数据应该是,列数变小,行数不变,因为降维就是减小变量的个数,而每列代表一个变量,而行数是观测的个数,这个不降,而现在是列数没有变,行数变了。说明,很多观测都是相关的,取最具代表的几个就可可以表示,原来那么多的观测,这个不能说是降维,可以说是压缩?不确定啊,哪位大牛说明一下就好了。在这篇文章里有讲到数据压缩,太厉害了!
spca 尤其其稀疏性,效果更好一点!

你可能感兴趣的:(跟踪算法,数学)