MATLAB自带工具箱实现PCA降维代码

下面开始介绍用MATLAB自带工具包函数pca(对应老版本函数princomp,在maltab里help princomp会提示你用pca代替他)进行降维的方法.
直接上代码分析:

[pc,score,latent,tsquare] = pca(feature);%我们这里需要他的pc和latent值做分析,这里只有feature为已知量

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
1.0000
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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值