%K-L變換的基本原理是去掉樣本集合數(shù)據(jù)(矢量)的分量相關(guān)性。
%
% 具體做法是對一組N維樣本向量,先求出其協(xié)方差矩陣,將協(xié)方差矩陣對角化,
% 得到本征向量,這些本征向量組成了N維空間的一組正交基,從本征向量中選取對應(yīng)本征值較大的若干個作為變換矩陣的列,
% 用這個變換矩陣對原有樣本進(jìn)行線性變換,投影到一個特征空間中,得到的向量稱為特征向量。K-L變換可以用來進(jìn)行樣本壓縮和特征提取。
% 實際問題中它要求樣本集合的分布應(yīng)該比較緊致,
% 如滿足高斯分布,這樣樣本的能量才能集中在較少的幾個本征向量的方向上。
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 用來產(chǎn)生特征多項式系數(shù)向量
% root=roots(p) % 求r的特征值
% sort(root());
[E,D]=eig(r);%矩陣的特征值
%eigenvalues =flipud(sort(diag(D)));
% 對特征值按逆序排序
[eigD,IX]=sort(diag(D),'descend');
% 特征向量矩陣按特征值的調(diào)整作對應(yīng)調(diào)整
eigE(:,1:length(IX))=E(:,IX);%
disp('協(xié)方差矩陣的特征值:');disp(eigD);
disp('協(xié)方差矩陣對應(yīng)于特征值的特征向量(列)矩陣:');disp(eigE);
% 樣本集X的協(xié)方差矩陣
Covx= cov(x);
disp('樣本集的協(xié)方差矩陣:');disp(Covx);
% 協(xié)方差矩陣CovX的特征值eigenvalue(D)與對應(yīng)的特征向量矩陣eigenvector(V)
[E,D] = eig(Covx);
% 對特征值按逆序排序
[eigD,IX]=sort(diag(D),'descend');
% 特征向量矩陣按特征值的調(diào)整作對應(yīng)調(diào)整
eigE(:,1:length(IX))=E(:,IX);
disp('協(xié)方差矩陣的特征值:');disp(eigD);
disp('協(xié)方差矩陣對應(yīng)于特征值的特征向量(列)矩陣:');disp(eigE);
% 對樣本集X進(jìn)行PCA
Y=(x-repmat(mean(x,1),10,1)) * eigE;
disp('樣本集x:');disp(x);
disp('樣本集x經(jīng)PCA后的結(jié)果:');
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;
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。