分享

pca.rar PCA.m

 梦想的边缘 2009-08-09
%K-L变换的基本原理是去掉样本集合数据(矢量)的分量相关性。
%
% 具体做法是对一组N维样本向量,先求出其协方差矩阵,将协方差矩阵对角化,
% 得到本征向量,这些本征向量组成了N维空间的一组正交基,从本征向量中选取对应本征值较大的若干个作为变换矩阵的列,
% 用这个变换矩阵对原有样本进行线性变换,投影到一个特征空间中,得到的向量称为特征向量。K-L变换可以用来进行样本压缩和特征提取。
% 实际问题中它要求样本集合的分布应该比较紧致,
% 如满足高斯分布,这样样本的能量才能集中在较少的几个本征向量的方向上。

clear;clc;
% %线性分类;
x1= [-5 -5;-5 4;4 -5;-5 6;-6 -5;];
x2=[ 5 5;5 6;6 5; 5 4; 4 5];
x=[x1;x2];
%   用PCA 变换来做一维特征提取
X=x1+x2;
m0=sum(sum(X));

%令p(w1)=p(w2)=0.5;
y1=x1';
y2=x2';
w1=y1;
z1=y1*y1';
z2=y2*y2';
r=1/10*(z1+z2);
% p=poly(r); % ploy 用来产生特征多项式系数向量
% root=roots(p) % 求r的特征值
% sort(root());


[E,D]=eig(r);%矩阵的特征值
%eigenvalues =flipud(sort(diag(D)));
% 对特征值按逆序排序
[eigD,IX]=sort(diag(D),'descend');
% 特征向量矩阵按特征值的调整作对应调整
eigE(:,1:length(IX))=E(:,IX);%
disp('协方差矩阵的特征值:');disp(eigD);
disp('协方差矩阵对应于特征值的特征向量(列)矩阵:');disp(eigE);

% 样本集X的协方差矩阵
Covx= cov(x);
disp('样本集的协方差矩阵:');disp(Covx);

% 协方差矩阵CovX的特征值eigenvalue(D)与对应的特征向量矩阵eigenvector(V) 
[E,D] = eig(Covx);

% 对特征值按逆序排序
[eigD,IX]=sort(diag(D),'descend');
% 特征向量矩阵按特征值的调整作对应调整
eigE(:,1:length(IX))=E(:,IX);
disp('协方差矩阵的特征值:');disp(eigD);
disp('协方差矩阵对应于特征值的特征向量(列)矩阵:');disp(eigE);

% 对样本集X进行PCA
Y=(x-repmat(mean(x,1),10,1))  * eigE;
disp('样本集x:');disp(x);
disp('样本集x经PCA后的结果:');
disp(Y);

Srange = minmax(x(:,1)');        % 样本集变化范围
Smean = mean(x);                 % 样本集中心点
% PCA主轴的方向向量
e=transpose(eigE(2,:)./eigE(1,:));
% PCA主轴的方程
y=e*(Srange-Smean(1))+Smean(2);
y=y';
% 绘制样本点及PCA主轴
plot(x(:,1),x(:,2),'r+');
hold on;plot(Srange,y);legend('样本点','PCA主轴一','PCA主轴二');
axis equal;hold off;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多