MATLAB自带工具箱实现PCA降维代码,着重介绍实现方法
2016-10-09 15:40
1131 查看
最近项目中需要进行PCA降维,环境是MATLAB,但是在网上找了很多都是介绍PCA原理的,的确介绍的很仔细,但是我是一个工科狗,只是想最快查到用代码实现降维的方法而已,网上的对我来说太多了,因此在此做一个总结,出于对知识的 尊重,插两篇介绍的不错的PCA 原理文章,只是想实现pCA的大可不必看.原理文章1
原理文章2
下面开始介绍用MATLAB自带工具包函数pca(对应老版本函数princomp,在maltab里help princomp会提示你用pca代替他)进行降维的方法.
直接上代码分析:
feature是被降维的特征,每一行是一个特征,列数代表总的特征个数,比如一个图片的HOG特征是96维,总共有8000个HOG特征,那么feature的维度是8000×96,我们的目标就是将其降维(假设将96维降到50维,)那么我们期望的降维后feature就变成了我们需要的feature_after_PCA:8000×50
latent用来计算降维后取多少维度能够达到自己需要的精度,
通过下面的代码运行结果可以得到取pc中对应每一维度对原始数据的精度:
结果应该是有96维,但是太长,这里随机删减了一部分,我们可以看到只去取第一维的话和原始数据的准确度只有27%,很低,取全部的维度最后的精度就是100%,如果我们觉得精度达到90%就能接受的话我们就只需要取精度为90%对应的维度,这里假设第50维的精度是90%.
因此我们需要取pc中的1:50列来做最后的变换矩阵:
因此我们最终的feature降维后的矩阵feature_after_PCA就通过下式计算:
至此我们PCA降维完成.这里需要人工介入的地方就是选取多少维度来确定和原始数据的精度问题.
补充:上面计算feature_after_PCA的方法是正确的,但是pca函数其实已经给出了所有的转换后矩阵表示,也就是输出的score项,因此在确定需要降维到50维度以后,只需要取score中对应的列就能得到feature_after_PCA:
原理文章2
下面开始介绍用MATLAB自带工具包函数pca(对应老版本函数princomp,在maltab里help princomp会提示你用pca代替他)进行降维的方法.
直接上代码分析:
[pc,score,latent,tsquare] = pca(feature);%我们这里需要他的pc和latent值做分析
feature是被降维的特征,每一行是一个特征,列数代表总的特征个数,比如一个图片的HOG特征是96维,总共有8000个HOG特征,那么feature的维度是8000×96,我们的目标就是将其降维(假设将96维降到50维,)那么我们期望的降维后feature就变成了我们需要的feature_after_PCA:8000×50
latent用来计算降维后取多少维度能够达到自己需要的精度,
通过下面的代码运行结果可以得到取pc中对应每一维度对原始数据的精度:
cumsum(latent)./sum(latent) 0.2763 0.3954 0.8765 0.8854 0.8931 0.8995 0.9055 0.9111 0.9808 0.9819 0.9828 0.9838 0.9846 0.9854 0.9862 0.9869 0.9876 0.9883 0.9999 1.0000
结果应该是有96维,但是太长,这里随机删减了一部分,我们可以看到只去取第一维的话和原始数据的准确度只有27%,很低,取全部的维度最后的精度就是100%,如果我们觉得精度达到90%就能接受的话我们就只需要取精度为90%对应的维度,这里假设第50维的精度是90%.
因此我们需要取pc中的1:50列来做最后的变换矩阵:
tran=pc(:,1:50);
因此我们最终的feature降维后的矩阵feature_after_PCA就通过下式计算:
feature= bsxfun(@minus,feature,mean(feature,1)); feature_after_PCA= feature*tran;
至此我们PCA降维完成.这里需要人工介入的地方就是选取多少维度来确定和原始数据的精度问题.
补充:上面计算feature_after_PCA的方法是正确的,但是pca函数其实已经给出了所有的转换后矩阵表示,也就是输出的score项,因此在确定需要降维到50维度以后,只需要取score中对应的列就能得到feature_after_PCA:
feature_after_PCA=score(:,1:50);
相关文章推荐
- SA:T1编写主函数法和T2Matlab自带的SA工具箱GUI法,两种方法实现对二元函数优化求解——Jason niu
- 实现web打印的各种方法介绍及实现代码
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- 多种图像的颜色/纹理描述子及其matlab代码实现 相似性量测方法
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇
- PCA降维算法总结以及matlab实现PCA
- 本文给出了一种方便实用的解决大文件的读取、存储等处理的方法,并结合相关程序代码对具体的实现过程进行了介绍
- PCA 降维算法详解 及 MATLAB实现。
- SDM For Face Alignment 流程介绍及Matlab代码实现之预处理篇
- 运用PCA(主成分分析法)进行人脸识别的MATLAB 代码实现
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- 查看Matlab内部函数代码二种方法介绍
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇
- 介绍两种方法来实现不用开浏览器就能运行php代码的方法
- 基于PCA的人脸识别的Matlab实现代码
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- matlab 工具之各种降维方法工具包,下载及使用教程,有PCA, LDA, 等等。。。