PCA 小代码 仅做一下小的测试 了解PCA的功能 将2维数据降成一维后 与原数据对比
Row=
2;
Col= 10;
X=[ 2.5 2.4
0.5 0.7
2.2 2.9
1.9 2.2
3.1 3.0
2.3 2.7
2 1.6
1 1.1
1.5 1.6
1.1 0.9];
X=X. ' ;
average=zeros(Row, 1);
for m= 1:Row
average(m)=sum(X(m,:))/Col;
end
XX=zeros(Row,Col);
for n= 1:Col
XX(:,n)=X(:,n)-average;
end
S=XX*XX ' /(Col-1);
[V,D]=eig(S);
% 是否去掉比较小的特征根对应的特征向量上的信息
% V( 1, 1)= 0;
% V( 2, 1)= 0;
Y=V ' *XX
YY=V*Y
Col= 10;
X=[ 2.5 2.4
0.5 0.7
2.2 2.9
1.9 2.2
3.1 3.0
2.3 2.7
2 1.6
1 1.1
1.5 1.6
1.1 0.9];
X=X. ' ;
average=zeros(Row, 1);
for m= 1:Row
average(m)=sum(X(m,:))/Col;
end
XX=zeros(Row,Col);
for n= 1:Col
XX(:,n)=X(:,n)-average;
end
S=XX*XX ' /(Col-1);
[V,D]=eig(S);
% 是否去掉比较小的特征根对应的特征向量上的信息
% V( 1, 1)= 0;
% V( 2, 1)= 0;
Y=V ' *XX
YY=V*Y
Row=2;
Col=10;
X=[2.5 2.4
0.5 0.7
2.2 2.9
1.9 2.2
3.1 3.0
2.3 2.7
2 1.6
1 1.1
1.5 1.6
1.1 0.9];
X=X.';
average=zeros(Row,1);
for m=1:Row
average(m)=sum(X(m,:))/Col;
end
XX=zeros(Row,Col);
for n=1:Col
XX(:,n)=X(:,n)-average;
end
S=zeros(Row,Row);
for n=1:Col
S=S+XX(:,n)*(XX(:,n).');
end
S=S/(Col-1);
[V,D]=eig(S);
VV=zeros(Row,1);
VV(:,1)=V(:,2);
X3=zeros(m,n);
for n=1:Col
X3(:,n)=(VV.')*XX(:,n);
end
XR=zeros(m,n);
for n=1:Col
XR(:,n)=VV*X3(1,n);
end
figure;
plot(XX(1,:),XX(2,:),'o');
hold on;
plot(X3(1,:),X3(2,:),'+');