coeff = pca(X)返回n×p数据矩阵的主成分系数。X的行对应于观察值,就是样本,列对应于变量,也就是特征。

系数矩阵是p×p。coeff的每一列包含一个主成分的系数,这些列按成分方差的降序排列。

默认情况下,pca以数据为中心,使用奇异值分解(SVD)算法。

一般用下面这个函数来进行获取投影矩阵Pro_Matrix。

获得投影矩阵后,通过下面这条语句得到降维后的数据。

Y=Pro_Matrix'*X;
function [Pro_Matrix,Mean_Image]=my_pca(Train_SET,Eigen_NUM)
%输入:
%Train_SET:训练样本集,每列是一个样本,每行一类特征,Dim*Train_Num
%Eigen_NUM:投影维数%输出:
%Pro_Matrix:投影矩阵
%Mean_Image:均值图像[Dim,Train_Num]=size(Train_SET);%当训练样本数大于样本维数时,直接分解协方差矩阵
if Dim<=Train_Num  % 比如 100个特征 150列数据,数据量大于特征量  Mean_Image=mean(Train_SET,2);Train_SET=bsxfun(@minus,Train_SET,Mean_Image);R=Train_SET*Train_SET'/(Train_Num-1);[eig_vec,eig_val]=eig(R);eig_val=diag(eig_val);[~,ind]=sort(eig_val,'descend');W=eig_vec(:,ind);Pro_Matrix=W(:,1:Eigen_NUM);else%构造小矩阵,计算其特征值和特征向量,然后映射到大矩阵Mean_Image=mean(Train_SET,2);  % 200个特征 100列数据,数据量明显不足Train_SET=bsxfun(@minus,Train_SET,Mean_Image);R=Train_SET'*Train_SET/(Train_Num-1);[eig_vec,eig_val]=eig(R);eig_val=diag(eig_val);[val,ind]=sort(eig_val,'descend');W=eig_vec(:,ind);Pro_Matrix=Train_SET*W(:,1:Eigen_NUM)*diag(val(1:Eigen_NUM).^(-1/2));
endend

有时候我们并不知道要降至多少维,但是有贡献率的要求,比如我希望降维之后的空间特征可以有90%的贡献率,那么可以用下面这个程序:

如何用MATLAB中的PCA函数进行数据降维相关推荐

  1. matlab的数学函数,matlab中常见数学函数的使用

    matlab中常见数学函数的使用 MATLAB 基本知识 Matlab 的内部常数 pi 圆周率 exp(1) 自然对数的底数 e i 或 j 虚数单位 Inf 或 inf 无穷大 Matlab 的常 ...

  2. matlab randi 函数,MATLAB中的randi函数

    randi Pseudorandom integers from a uniform discrete distribution.来自一个均匀离散分布的伪随机整数 R = randi(IMAX,N) ...

  3. MATLAB自带PCA函数的参数含义及使用方法

    目录 1.PCA函数的输入与输出参数 2.PCA函数的使用方法 参考文献: 1.PCA函数的输入与输出参数 function [coeff, score, latent, tsquared, expl ...

  4. Matlab中的lsqcurvefit函数的使用

    Matlab中的lsqcurvefit函数的使用 lsqcurvefit函数 调用示例 lsqcurvefit函数 非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数 ...

  5. Matlab:Matlab中常用的函数、案例详细攻略

    Matlab:Matlab中常用的函数.案例详细攻略 目录 常用函数 1.与文件相关 2.MATLAB GUI不同控件函数间变量传递方法 常用函数 Matlab中的bwmorph函数解释 bwmorp ...

  6. matlab作动态函数曲线图,[转载]Matlab中使用Plot函数动态画图方法总结

    本帖最后由 sonictl 于 2012-12-31 12:18 编辑 请删除我 清楚超靠靠靠 没办法,一会儿限制这不能发表,那不能发表的.... [转载]Matlab中使用Plot函数动态画图方法总 ...

  7. python实现Matlab中的circshift函数

    circshift是Matlab中矩阵循环移位函数,具体使用参照该链接. 但是python中并没有封装好的该函数,因此需要自己实现. 思路:将矩阵分为两部分,然后按照自己的需要堆叠在一起就可以了. n ...

  8. matlab里inline定义矩阵,Matlab中的inline函数_matlab中inline函数

    Matlab中的inline函数 1.有时为了描述某个数学函数的方便,可以用inline()函数来直接编写该函数,形式相当于M-函数,但无编写一个真正的MATLAB文件,就可以描述出某种数学关系.其调 ...

  9. Matlab中的eig函数和Opecv中eigen()函数的区别

    奇异值分解的理论参见下面的链接 http://www.cnblogs.com/pinard/p/6251584.html https://blog.csdn.net/shenziheng1/artic ...

最新文章

  1. JavaScript 页面间传值
  2. 华为交换机端口绑定mac防arp欺骗
  3. 新雨个人面试经验总结
  4. JBoss was unable to start within 50 seconds-JBoss启动超时
  5. VC++中进程间相互通信的十一种方法
  6. Chrome DevTools:在 Profile 性能分析中显示原生 javascript 函数
  7. 如何提升各开发角色效率,既保证产品质量又能快速上线?
  8. 牛客 - 牛半仙的妹子图(并查集+bitset/克鲁斯卡尔重构树+主席树)
  9. 工业以太网交换机与以太网光端机的区别
  10. 为什么你的数据分析成果总是难以落地?
  11. 数据库增加列或删除列操作
  12. java 上传断点续传_JAVA大文件上传断点续传解决方案
  13. 【视频技术】ffmpeg截取图片(Mac)
  14. 投入产出表直接消耗系数和完全消耗系数Stata版本(1990-2017年)
  15. windows捕获串口数据_如何下载和安装用于Windows数据包捕获的Npcap库?
  16. java 线程 block_JAVA线程的BLOCK状态实例分析
  17. 致远OA webmail.do任意文件下载 CNVD-2020-62422
  18. [作品]文本修辑转换器
  19. 2016搜狗校招编程题
  20. 应届毕业生转行新媒体运营指南:学习新媒体运营的三大路径

热门文章

  1. 对开小型皮具厂有帮助的一些资料
  2. **PTA:浙大版《C语言程序设计(第3版)》编程题答案*
  3. Math.random().toString(36)使用--- 随机生成数字与字母的组合
  4. 想在科研界混,你先要学会如何在学术会议上问出好问题
  5. libsvm python_libsvm与python的使用
  6. 机械制图及计算机绘图试题库,201机械制图及计算机绘图2试题库概述.doc
  7. Windows Defender的一些渗透知识
  8. xrea mysql密码_Xrea日本老牌免费空间申请和使用教程:1GB空间可绑域名_免费PHP空间 | 微站中国|MicroHost...
  9. 在Student中添加TEACHER表
  10. React中pros和state的区别