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 PCA 算法的更多相关文章
- PCA算法学习(Matlab实现)
PCA(主成分分析)算法,主要用于数据降维,保留了数据集中对方差贡献最大的若干个特征来达到简化数据集的目的. 实现数据降维的步骤: 1.将原始数据中的每一个样本用向量表示,把所有样本组合起来构成一个矩 ...
- 我所认识的PCA算法的princomp函数与经历 (基于matlab)
我接触princomp函数,主要是因为实验室的项目需要,所以我一接触的时候就希望快点学会怎么用. 项目中需要利用PCA算法对大量数据进行降维. 简介:主成分分析 ( Principal Compone ...
- 模式识别(1)——PCA算法
作者:桂. 时间:2017-02-26 19:54:26 链接:http://www.cnblogs.com/xingshansi/articles/6445625.html 声明:转载请注明出处, ...
- matlab pca基础知识
PCA的一些基本资料 最近因为最人脸表情识别,提取的gabor特征太多了,所以需要用PCA进行对提取的特征进行降维. 本来最早的时候我没有打算对提取的gabor特征进行降维,但是如果一个图像时64*6 ...
- PCA算法是怎么跟协方差矩阵/特征值/特征向量勾搭起来的?
PCA, Principle Component Analysis, 主成份分析, 是使用最广泛的降维算法. ...... (关于PCA的算法步骤和应用场景随便一搜就能找到了, 所以这里就不说了. ) ...
- 三种方法实现PCA算法(Python)
主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...
- 降维之pca算法
pca算法: 算法原理: pca利用的两个维度之间的关系和协方差成正比,协方差为0时,表示这两个维度无关,如果协方差越大这表明两个维度之间相关性越大,因而降维的时候, 都是找协方差最大的. 将XX中的 ...
- OpenCV学习(35) OpenCV中的PCA算法
PCA算法的基本原理可以参考:http://www.cnblogs.com/mikewolf2002/p/3429711.html 对一副宽p.高q的二维灰度图,要完整表示该图像,需要m = ...
- PCA算法的最小平方误差解释
PCA算法另外一种理解角度是:最小化点到投影后点的距离平方和. 假设我们有m个样本点,且都位于n维空间 中,而我们要把原n维空间中的样本点投影到k维子空间W中去(k<n),并使得这m个点到投影点 ...
随机推荐
- Spring JDBC更新数据
以下示例将展示如何使用Spring jdbc执行更新数据库表的记录,这里演示如何更新student表中指定条件的记录. 语法: String updateQuery = "update St ...
- Spring Boot 快速搭建的三种方式
方式一:http://start.spring.io/ 打开浏览器,在地址栏中输入http://start.spring.io/ 如下图: 点击generate project 然后就会有一个zip ...
- 设置 sqlserver Profiler 只监控 EF的sql执行请求
当我们用EF执行语句的时候,可以使用 sqlserver Profiler来监控到底执行了哪些sql语句,但是默认他是监控全局的,我们只想监控Ef的语句,这里如下设置 这样就只会监控 EF产生的 sq ...
- 正则表达式(Java版整理)
基础 元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 ^ 匹配字符串的开始 $ 匹配字符串的结束 \b 匹配字符串的结束 ...
- java链接mysql 中文乱码
{转!} 背景: 由于最近在开发一个APP的后台程序,需要Java连接远程的MySQL数据库进行数据的更新和查询操作,并且插入的数据里有中文,在插入到数据库后发现中文都是乱码.网上查了很多教程,最后都 ...
- spark not contain
参考网址 http://stackoverflow.com/questions/33608526/is-there-a-way-to-filter-a-field-not-containing-som ...
- 利用neon技术对矩阵旋转进行加速
一般的矩阵旋转操作都是对矩阵中的元素逐个操作,假设矩阵大小为m*n,那么时间复杂度就是o(mn).如果使用了arm公司提供的neon加速技术,则可以并行的读取多个元素,对多个元素进行操作,虽然时间复杂 ...
- 安装配置和使用HBASE Cluster(基于发行版CDH5.0.2)——系列随笔
本系列文章只是记录了笔者本人在学习实验安装和使用基于CDH5.0.2的HBASE集群过程中的一些经验教训和心得,绝不是详细的安装过程,因本人不过一初学者,很多方面不甚了了,如果能让不幸读到的人有所得则 ...
- java中*和**的作用
“*”就表示了所有的文件,但是“*”并不包括子目录下的文件: “**”匹配包含任意级子目录中所有的文件
- ExtJS中给Tree节点加click事件
第一种: 直接通过TreePanel中的Config Option中的listener来添加,代码如下: var TreePan = new Ext.tree.TreePanel({ id: 'Tre ...