利用MATLAB进行主成分分析降维示意

%% PCA降维示意;从二维到一维
clear;
clc;
data=[1 1 2 4 2 6 -1 3;1 3 3 4 4 0 2 1]; %原始数据
avg=mean(data,2);
data_avg=data-avg; %去均值处理
C=data_avg*data_avg'/size(data,2); %计算协方差矩阵
[V,D]=eig(C); %对协方差矩阵作特征值分解
[row,col]=find(max(max(D))==D); %找到最大特征值对应的特征向量
E=V(:,col)';
data_y=E*data_avg; %降维后的一维值
scatter(data(1,:),data(2,:),100,'.'); %原始数据分布
hold on;
scatter(data_avg(1,:),data_avg(2,:),'*'); %去均值后数据分布
grid on;
hold on;
axis equal;
axis([-4,6,-4,4]);
x=-10:0.01:10;
y=E(2)/E(1)*x;
plot(x,y,'b'); %数据投影线
hold on;
x1=data_y*E(1)/sqrt(E(1)^2+E(2)^2);
y1=data_y*E(2)/sqrt(E(1)^2+E(2)^2);
scatter(x1,y1,'*','k'); %一维数据分布
hold on;
x2=[data_avg(1,:);x1];
y2=[data_avg(2,:);y1];
for i=1:size(data,2)
    plot(x2(:,i),y2(:,i),'--');
    hold on;
end

你可能感兴趣的:(利用MATLAB进行主成分分析降维示意)