当前位置: 首页 > news >正文

Matlab PCA 算法

Matlab 自带PCA函数形式为
 [mappedX, mapping] = pca(X, no_dims)
 

 

自己编写PCA函数的步骤

%第一步:输入样本矩阵%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
data=rand(10,8)+randn(10,8)+ones(10,8);
%现对其进行pca降维
%%
%第二步:计算样本中每一维的均值,然后计算观察值与均值之间的偏差,再计算协方差矩阵
data=bsxfun(@minus,data,mean(data));%对样本矩阵去均值
C=data'*data;
C=C./(size(data,1)-1);%根据协方差公式计算协方差,得到协方差矩C

%第三步:计算协方差矩阵的特征值和特征向量矩阵
fprintf(1,'Calculating generalized eigenvectors and eigenvalues...\n');
[eigvectors, eigvalues] = eig(C);%eigvectors为特征向量组成的矩阵,eigvalues特征值组成的对角矩阵
fprintf(1,'Sorting eigenvectors according to eigenvalues...\n');
d1=diag(eigvalues);%返回矩阵对角线上的值,为列向量。
[dsort index]=sort(d1,'descend'); %以降序排序,dsort为排列后的值,index为索引值
vsort=eigvectors(:,index); %将特征向量按照特征值大小按列排序

%第四步:计算总能量,并选取贡献率最大的特征值
dsum=sum(d2); %对所有的特征值求和
dsum_extract = 0;%求前几个特征值之和,当前几个特征值之和大于90%时,可以认为这几个特征值可以表征当前矩阵
p = 0;
while( dsum_extract/dsum < 0.9)
p = p + 1;
dsum_extract = sum(dsort(1:p));
end


%第五步:计算前p个特征值所对应的的特征向量组成的矩阵,计算降维后的样本矩阵
vsort = vsort(:,1:p);%提取前p列特征向量获得d*p矩阵
fprintf(1,'Feature extraction and calculating newData...\n');
newdata=data*vsort;%生成N行p列的矩阵,达到降维的效果




相关文章:

  • Matlab排序函数
  • Matlab取整函数
  • Matlab图像直方图相关函数
  • Matlab中find函数的使用说明
  • Matlab中arrayfun函数
  • Matlab数形结合求解不等式
  • Matlab中的fzero和fsolve函数
  • Matlab 如何用legend标记部分曲线
  • Matlab中绘制带箭头的坐标轴
  • Matlab删除cell数组中全为NaN的行和列
  • Ubuntu环境变量PATH设置
  • 【MLF Week 7 上】Overfitting和Regularization
  • Windows 7 下查询设备详细信息
  • Windows 7 英文版操作系统中文软件乱码解决方法
  • 如何彻底删除QQ程序
  • Angular6错误 Service: No provider for Renderer2
  • Debian下无root权限使用Python访问Oracle
  • Elasticsearch 参考指南(升级前重新索引)
  • Javascript基础之Array数组API
  • JAVA多线程机制解析-volatilesynchronized
  • React-生命周期杂记
  • Terraform入门 - 3. 变更基础设施
  • 程序员最讨厌的9句话,你可有补充?
  • 分享几个不错的工具
  • 关于for循环的简单归纳
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 云大使推广中的常见热门问题
  • Java数据解析之JSON
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • Spring Batch JSON 支持
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #ifdef 的技巧用法
  • #数学建模# 线性规划问题的Matlab求解
  • $nextTick的使用场景介绍
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (第27天)Oracle 数据泵转换分区表
  • (多级缓存)缓存同步
  • (二)斐波那契Fabonacci函数
  • (四) Graphivz 颜色选择
  • (四)React组件、useState、组件样式
  • (一)Neo4j下载安装以及初次使用
  • (转载)深入super,看Python如何解决钻石继承难题
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET : 在VS2008中计算代码度量值
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • ?.的用法
  • @Autowired 与@Resource的区别
  • @media screen 针对不同移动设备
  • @property python知乎_Python3基础之:property