1. 程式人生 > >吳恩達老師機器學習筆記主成分分析PCA

吳恩達老師機器學習筆記主成分分析PCA

接著學習主成分分析,這個演算法在之前計量地理學的作業裡寫過,不過前者稍微囉嗦了一點。

原始二維資料:
在這裡插入圖片描述
放程式碼:

load('ex7data1.mat');
[m n]=size(X);
X=(X-mean(X))./std(X); 
sigma=1/m*(X'*X); % 求取協方差矩陣
[U,S,V]=svd(sigma); % 求取特徵向量
Ureduce=U(:,1:1); % 這裡降為1維資料
z=X*Ureduce; % 投影到1維座標系
y=z*Ureduce'; % 顯示降維後的資料
hold on;
scatter(X(:,1),X(:,2)); %繪製不同類別的點集
scatter(y(:,1),y(:,2));
hold off;

主成分分析得到的一維資料(紫色部分):
在這裡插入圖片描述
這一點湊篇文章太不值得了,於是接著做第二個練習

2 對人物照片進行主成分分析

原始影象:

在這裡插入圖片描述
程式碼如下:

load('ex7faces.mat');
X=X(1:100,:);
[m n]=size(X);
X=(X-mean(X))./std(X); 
sigma=1/m*(X'*X); % 求取協方差矩陣
[U,S,V]=svd(sigma); % 求取特徵向量
Ureduce=U(:,1:10); % 這裡降為10維資料
z=X*Ureduce; % 投影到1維座標系
y=z*Ureduce'; % 顯示降維後的資料
displayData(y); % 練習給的顯示多幅影像的函式
%{
因為顯示多幅影像函式太麻煩了,就不寫了,
這裡寫了顯示單幅影像意思意思
colormap(gray); % 顯示灰度影象
img=X(1,:)./max(abs(X(1,:)));
array=reshape(img,sqrt(n),sqrt(n));
k = imagesc(array, [-1 1]);
%}

結果影象:
在這裡插入圖片描述