资源简介
网上搜集到的几份PCA代码,全部为MATLAB语言,PCA.m为一个独立调用的韩式,完成PCA功能。pca2D.m完成通过PCA完成2D数据的分割。其余的比较复杂,有需要的可以研究一下。

代码片段和文件信息
function varargout = pca(X N method)
%PCA PRINCIPLE COMPONENTS ANALYSIS
%
% Performing principal components analysis on the N1-by-N2 real-valued
% data matrix X where N1 and N2 are the number of features (N1 variables)
% and observations (N2 samples) respectively.
%
% P = pca(XNmethod) returns the N-by-N1 matrix P of basis vectors one
% basis vector per row in order of decreasing corresponding eigenvalues
% i.e. P*X retains the first N principle components. If N is not
% specified all components (N=N1) are kept.
%
% Two methods are available: ‘eig‘ (default) and ‘svd‘ which solve the
% problem by eigenvalue decomposition and singular value decomposition
% respectively. ‘svd‘ is running in ‘economy‘ mode. If there are more
% variables than samples (N1>N2) ‘svd‘ is recommended for this code.
%
% [P D] = pca(XNmethod) also returns all eigenvalues (normalized) in D
% in descending order.
%
% [P D Y] = pca(XNmethod) further returns the N-by-N2 matrix Y = P*X
% each column of whom is the projection of the corresponding observation
% from X onto the basis vectors contained in P.
%
% Siqing Wu <6sw21@queensu.ca>
% Version: 1.1 Date: 2008-07-30
error(nargchk(13nargin)) % check the number of arguments
error(nargoutchk(03nargout))
[nr nc] = size(X);
if nargin<3
method = ‘eig‘; % default method
end
if nargin<2
N = nr; % keep all components
elseif N < 1 || N > nr || round(N)~=N
fprintf(‘Input N=%g is not valid; all components will be retained.\n‘ N)
N = nr;
end
X = X-repmat(mean(X2)[1 nc]); % center data
switch method
case ‘eig‘
C = X*X.‘;
% should be C/(nc-1) for unbiased estimate of the covariance matix
% but won‘t affect P.
[ED] = eig(C); % D lists eigenvalues from small to large
% rearrange D and E
D = diag(D);
D = D(end:-1:1)/max(D);
E = E(:end:-1:1)‘;
P = E(1:N:);
case ‘svd‘
% Instead of solving X*X‘ = E*D*E‘ solve X = U*Sigma*V‘
% X*X‘ = U*Sigma*V‘*V*Sigma*U‘ = U*Sigma^2*U‘ -> P = U‘;
[Usigma] = svd(X‘econ‘); % “economy size“ decomposition
if N > nc
fprintf(‘SVD -> N=%d is used.\n‘ nc)
N = nc;
end
D = diag(sigma).^2;
D = D/max(D);
P = U(:1:N)‘;
otherwise
error(‘Undefined method!‘)
end
fprintf(‘Top %d components are retained; cumulative eigenvalue contribution is %1.2f\n‘ N sum(D(1:N))/sum(D))
switch nargout
case {01}
varargout = {P};
case {2}
varargout = {P D};
case {3}
Y = P*X;
varargout = {P D Y};
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2748 2012-02-21 11:12 pca.m
文件 1400 2012-02-21 10:57 pca2D.m
文件 5211 2012-02-21 10:38 PCAexample.m
文件 12236 2009-06-11 16:03 PCA_Nicolas\PCA_Nicolas.m
文件 218 2009-06-09 22:24 PCA_Nicolas\dim3_data.mat
文件 240 2009-06-09 14:05 PCA_Nicolas\dim_data.mat
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论