PCA主成分分析的matlab實現以及可視化

PCA相信大家都很熟悉,但是苦於網上的代碼資料良莠不齊。我在自己寫了,並且驗證過代碼的可行性之後,貼出來給大家分享。有什麼問題可以大家交流一下。由於初次使用csdn,公式原理太複雜我就不打了(懶),大家可以自己看資料。實際上看了我的可視化之後,大家也能直觀地瞭解PCA的思想了,直接上代碼。

代碼如下:

爲防止亂碼,下面貼入無註釋版

PCA_test.m

X_origin=randn(2000,2);

figure(1);

scatter(X_origin(:,1),X_origin(:,2),3);

X=(X_origin+100*ones(2000,2))*[2 1;1 2];

figure(2);

scatter(X(:,1),X(:,2),3);

[X_PCA]=PCA_mainfunction(X,1);

figure(3);

scatter(X_PCA(:,1),X_PCA(:,2),3);

 

function[X_PCA]=PCA_mainfunction(X,T)

n=size(X,1);

X_mean=1/n.*(X'*ones(n,1));

H=(eye(n)-(ones(n,n)));

S=1/n.*X'*H*X;

[V,D]=eig(S);

for i=1:size(X,2)

    V(i)=V(i)/norm(V(i));

end

X_PCA=(X-ones(n,1)*X_mean')*V(:,1:T)*V(:,1:T)';

end

 

在用於實際任務時,X可直接用實際數據。這裏用隨機數據只爲展示需要。另外,紅色部分的*V(:,1:T)'也需要去掉。這個也是爲了直觀展示而進行的座標轉換,實際工程中不需要。

效果:

(1)原始隨機數據(X_origin=randn(2000,2)

經過偏移以及轉置後的數據(X=(X_origin+100*ones(2000,2))*[2 1;1 2];

(2)經過降維後的數據,爲直觀展現效果用二維圖像來表示

(3)如果保留所有的兩個維度的話

直觀來看,就是投影到了如圖所示的兩個方向

如果去掉上一幅圖的座標的投影,我們就可以得到這樣一幅座標變換後的散點圖。實際上PCA的含義就是特徵空間的重構,而這個重構的標準是使得重構後的樣本具有最大的方差,直觀來說,就是數據要儘量“散”地分佈在特徵空間裏。可以看到,這一幅圖是與最原始的隨機數據樣本是很相像的。當方差大了,樣本點在特徵空間裏的距離也就越大,這很有利於我們對樣本進行分類,這也是PCA的另外一個意義。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章