在matlab中实现PCA算法

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来计算。

时间: 2024-12-24 07:52:30

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

sklearn中的降维算法PCA和SVD

sklearn中的降维算法PCA和SVD 1 概述 1.1 从什么叫“维度”说开来 1.2 sklearn中的降维算法 2 PCA与SVD 2.1 降维究竟是怎样实现? 2.2 重要参数n_components 2.2.1 迷你案例:高维数据的可视化 2.2.2 最大似然估计自选超参数 2.2.3 按信息量占比选超参数 2.3 PCA中的SVD 2.3.1 PCA中的SVD哪里来? 2.3.2 重要参数svd_solver 与 random_state 2.3.3 重要属性components_

【转】PCA算法学习_1(OpenCV中PCA实现人脸降维)

前言: PCA是大家经常用来减少数据集的维数,同时保留数据集中对方差贡献最大的特征来达到简化数据集的目的.本文通过使用PCA来提取人脸中的特征脸这个例子,来熟悉下在oepncv中怎样使用PCA这个类. 开发环境:ubuntu12.04+Qt4.8.2+QtCreator2.5.1+opencv2.4.2 PCA数学理论: 关于PCA的理论,资料很多,公式也一大把,本人功底有限,理论方面这里就不列出了.下面主要从应用的角度大概来讲讲具体怎么实现数据集的降维. 把原始数据中每个样本用一个向量表示,然

机器学习实战ByMatlab(二)PCA算法

PCA 算法也叫主成分分析(principal components analysis),主要是用于数据降维的. 为什么要进行数据降维?因为实际情况中我们的训练数据会存在特征过多或者是特征累赘的问题,比如: 一个关于汽车的样本数据,一个特征是"km/h的最大速度特征",另一个是"英里每小时"的最大速度特征,很显然这两个特征具有很强的相关性 拿到一个样本,特征非常多,样本缺很少,这样的数据用回归去你和将非常困难,很容易导致过度拟合 PCA算法就是用来解决这种问题的,其

Matlab中配置VLFeat

在VLFeat官网上是这么介绍VLFeat的:VLFeat开源库实现了很多著名的机器视觉算法,如HOG, SIFT, MSER, k-means, hierarchical k-means, agglomerative information bottleneck, SLIC superpixels, 和 quick shift.VLFeat开源库是用C语言写的,以确保其效率和兼容性,同时VLFeat还提供了MATLAB接口和详细的文档.它可以在windows, Mac, 和Linux上使用.

在matlab中配置vlfeat

[转自]http://cnyubin.com/?p=85 在VLFeat官网上是这么介绍VLFeat的:VLFeat开源库实现了很多著名的机器视觉算法,如HOG, SIFT, MSER, k-means, hierarchical k-means, agglomerative information bottleneck, SLIC superpixels, 和 quick shift.VLFeat开源库是用C语言写的,以确保其效率和兼容性,同时VLFeat还提供了MATLAB接口和详细的文档.

python下PCA算法与人脸识别

关于这部分主要是想在python下试验一下主成分分析(PCA)算法以及简单的人脸识别.曾经详述过matlab下的PCA以及SVM算法进行人脸识别技术,参考如下: 主成分分析法-简单人脸识别(一) 主成分分析-简单人脸识别(二) PCA实验人脸库-人脸识别(四) PCA+支持向量机-人脸识别(五) 主成分分析(PCA)算法主要是对高维数据进行降维,最大限度的找到数据间的相互关系,在机器学习.数据挖掘上很有用.在机器学习领域算法众多,贴一个: 大神博客索引 关于PCA的核心思想与原理介绍上述已经给出

降维之pca算法

pca算法: 算法原理: pca利用的两个维度之间的关系和协方差成正比,协方差为0时,表示这两个维度无关,如果协方差越大这表明两个维度之间相关性越大,因而降维的时候, 都是找协方差最大的. 1 将XX中的数据进行零均值化,即每一列都减去其均值. 2 计算协方差矩阵C=1mXTXC=1mXTX 3 求出CC的特征值和特征向量 4 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P 5 Y=XPY=XP就是降维到k维后的数据. 代码: # coding=utf-8 import m

【Matlab开发】matlab中bar绘图设置与各种距离度量

[Matlab开发]matlab中bar绘图设置与各种距离度量 标签(空格分隔): [Matlab开发] [机器学习] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ Matlab Bar图如何为每个bar设置不同颜色 data = [3, 7, 5, 2;4, 3, 2, 9;6, 6, 1, 4]; b = bar(data); 使用bar绘制非常直观简单,但有时需要突出显示某一个bar,比如该bar是一个标杆,用来衡量其bar的高度,所以可以用醒目

Matlab中的一些小技巧

Matlab中的一些小技巧 1.. Ctrl+C 中断正在执行的操作 如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用Ctrl+c来中断.MATLAB这时可能正疲于应付,响应会有些滞后. 2. figure命令新建一个绘图窗口 figure 可以打开一个空的绘图窗口,接下的绘图命令可以将图画在它里面,而不会覆盖以前的绘图窗口.当有多个figure窗口时,在命令窗口中执行如Plot等命令将覆盖当前figure窗口中的对象.所谓的当前figure窗口,也就是最后一次查看的窗口(可以用