function [V,S,E]=princa(X)
[m,n]=size(X); %计算矩阵的行m和列n %-------------第一步:标准化矩阵-----------------%
mv=mean(X); %计算各变量的均值
st=std(X); %计算各变量的标准差
X=(X-repmat(mv,m,1))./repmat(st,m,1); %标准化矩阵X %-------------第二步:计算相关系数矩阵-----------------%
% R1=X'*X/(m-1); %方法一:协方差矩阵计算公式
% R2=cov(X); %方法二:协方差矩阵计算函数
R=corrcoef(X); %方法三:相关系数矩阵函数 %-------------第三步:计算特征向量和特征值-----------------%
[V,D]=eig(R); %计算矩阵R的特征向量矩阵V和特征值矩阵D,特征值由小到大
V=(rot90(V))'; %将特征向量矩阵V从大到小排序
D=rot90(rot90(D)); %将特征值矩阵由大到小排序
E=diag(D); %将特征值矩阵转换为特征值向量 %-------------第四步:计算贡献率和累计贡献率-----------------%
ratio=0; %累计贡献率
for k=1:n
r=E(k)/sum(E); %第k主成份贡献率
ratio=ratio+r; %累计贡献率
if(ratio>=0.9) %取累计贡献率大于等于90%的主成分
break;
end
end %-------------第五步:计算得分-----------------%
S=X*V;

如果要求主成分分析,用matlab自带一个的函数(princomp)就行。Princomp调用如下:
[COEFF,SCORE,latent,tsquare] = princomp(zscore(X))

zscore(X)是对矩阵X进行标准化操作。
COEFF是X矩阵所对应的协方差阵的所有特征向量组成的矩阵,即变换矩阵或称投影矩阵,每列对应一个特征值的特征向量,列的排列顺序是按特征值的大小递减排序
相当于上面程序中的V,它表示的是主成分的系数。
SCORE是对主成分的打分,也就是说原X矩阵在主成分空间的表示。每行对应样本观测值,每列对应一个主成份(变量),它的行和列的数目和X的行列数目相同。(相当于上面程序中的S)
latent是一个向量,它是X所对应的协方差矩阵的特征值向量。 (相当于程序中的E)
特征值与分数之间的关系:latent=diag(cov(SCORE));
tsquare是表示对每个样本点Hotelling的T方统计量
计算PCA的时候,如果直接有现成的协方差阵,用函数pcacov来计算。

在matlab中实现PCA算法的更多相关文章

  1. sklearn中调用PCA算法

    sklearn中调用PCA算法 PCA算法是一种数据降维的方法,它可以对于数据进行维度降低,实现提高数据计算和训练的效率,而不丢失数据的重要信息,其sklearn中调用PCA算法的具体操作和代码如下所 ...

  2. OpenCV学习(35) OpenCV中的PCA算法

    PCA算法的基本原理可以参考:http://www.cnblogs.com/mikewolf2002/p/3429711.html     对一副宽p.高q的二维灰度图,要完整表示该图像,需要m = ...

  3. Matlab中K-means聚类算法的使用(K-均值聚类)

    K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小. 使用方法:Idx=Kmeans(X,K)[Idx,C]=Kmeans(X,K) [Idx, ...

  4. PCA算法学习(Matlab实现)

    PCA(主成分分析)算法,主要用于数据降维,保留了数据集中对方差贡献最大的若干个特征来达到简化数据集的目的. 实现数据降维的步骤: 1.将原始数据中的每一个样本用向量表示,把所有样本组合起来构成一个矩 ...

  5. MATLAB中“fitgmdist”的用法及其GMM聚类算法

    MATLAB中“fitgmdist”的用法及其GMM聚类算法 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 高斯混合模型的基本原理:聚类——GMM,MA ...

  6. Matlab PCA 算法

    Matlab 自带PCA函数形式为 [mappedX, mapping] = pca(X, no_dims) 自己编写PCA函数的步骤 %第一步:输入样本矩阵%%%%%%%%%%%%%%%%%%%%% ...

  7. 我所认识的PCA算法的princomp函数与经历 (基于matlab)

    我接触princomp函数,主要是因为实验室的项目需要,所以我一接触的时候就希望快点学会怎么用. 项目中需要利用PCA算法对大量数据进行降维. 简介:主成分分析 ( Principal Compone ...

  8. 机器学习实战基础(二十三):sklearn中的降维算法PCA和SVD(四) PCA与SVD 之 PCA中的SVD

    PCA中的SVD 1 PCA中的SVD哪里来? 细心的小伙伴可能注意到了,svd_solver是奇异值分解器的意思,为什么PCA算法下面会有有关奇异值分解的参数?不是两种算法么?我们之前曾经提到过,P ...

  9. 机器学习实战基础(二十一):sklearn中的降维算法PCA和SVD(二) PCA与SVD 之 降维究竟是怎样实现

    简述 在降维过程中,我们会减少特征的数量,这意味着删除数据,数据量变少则表示模型可以获取的信息会变少,模型的表现可能会因此受影响.同时,在高维数据中,必然有一些特征是不带有有效的信息的(比如噪音),或 ...

随机推荐

  1. openstack之虚拟机管理命令

    在控制节点上建hzb-openrc.sh export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_ ...

  2. HDMI之HPD

    HDMI(19Pin)/DVI(16 pin)的功能是热插拔检测(Hot Plug Detect,HPD),这个信号将作为主机系统是否对HDMI/DVI是否发送TMDS信号的依据.HPD是从显示器输出 ...

  3. js中对String去空格

    str为要去除空格的字符串: 去除所有空格: str = str.replace(/\s+/g,""); 去除两头空格: str = str.replace(/^\s+|\s+$/ ...

  4. 转一篇用分布式解决ERP问题

    https://www.cnblogs.com/liuche/p/7955462.html

  5. hdu 5083 有坑+字符串模拟水题

    http://acm.hdu.edu.cn/showproblem.php?pid=5083 机器码和操作互相转化 注意SET还要判断末5位不为0输出Error #pragma comment(lin ...

  6. Scala_基本语法

    基本语法 声明值和变量 Scala有两种类型的变量: val:是不可变的(变量的引用不可变),在声明时就必须被初始化,而且初始化以后就不能再赋值: var:声明的时候需要进行初始化,初始化以还可以再对 ...

  7. jQuery 与 或 的坑

    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>< ...

  8. A - Class Statistics

    A - Class Statistics Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Subm ...

  9. unigui如何把webApp的子功能映射到微信公众号菜单

    只需要用UniApplication.Parameters.Values[‘xxx’]读取url的参数然后调用就可以 例如:要打开公众号菜单的取样送检指南查询模块,在自定义菜单设定:http://ww ...

  10. [leet code 135]candy

    1 题目 There are N children standing in a line. Each child is assigned a rating value. You are giving ...