%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; |
|