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表现的测试例子。
下面套用一个实际的例子说明一下,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 尤其其稀疏性,效果更好一点!
可以免费下载,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 尤其其稀疏性,效果更好一点!
相关文章推荐
- 测试工程师
- 开发中GBK+UTF8编码的处理
- css笔记
- kruskal最小生成树
- SVN服务器搭建和使用(二)
- 有几个有意思的linux命令
- 数据库事务隔离级别
- iOS单例模式~~以及单例宏定义
- 10个开源新秀项目
- java设置 自己的Property
- delphi XE6调用android标准功能
- git 使用
- LINUX下网卡激活失败时解决方法(已实践)---转
- C++ 自定义事件机制
- MyEclipse 代码自动提示功能失效的解决方案
- eclipse debugger模式下,tomcat不能重新启动
- Node.js学习--基础知识(5)--npm
- JSON与XML的区别比较
- C#高级编程十四天----构造函数
- 自定义鼠标光标,制作cur,设置热点,中心点。