機器學習 Matlab 主成份分析 PCA

2021-08-20 22:37:06 字數 2016 閱讀 9503

作業中的演算法描述:

試使用matlab 中的svd 函式實現pca 演算法,即輸入資料矩陣x 和降維後的維數k,對每乙個樣本進行去中心化,然後對進行去中心化後的資料矩陣xc 用svd 函式[u,s,v] = svd(xc),輸出降維的投影矩陣ureduce(即u 的前k 列),降維後的座標表示z=ureduce』*xc。

因為使用matlab中的eig也同樣能夠達到計算特徵值和特徵向量的目的,所以**中實現了兩種方法,並使用yale_face資料集作為測試。

test.m:

clear;

load('yale_face.mat');

[n, m]= size(x);

imshow(reshape(x(:,1),[64,64]),);

fori= 1:3

subplot(3,1,i)

imshow(reshape(x(:,i),[64,64]),);

end%[z1, v1]= mpca(x, 5);

% [u2_reduce, z2, v2]= mpca(x, 10);

% x_re2= u2_reduce* z2;

% for i= 1:3

% subplot(3,1,i)

% imshow(reshape(x_re2(:,i),[64,64]),);

% end

[u3_reduce, z3, v3]= mpca(x, 100);

x_re3= u3_reduce* z3;

fori= 1:3

subplot(3,1,i)

imshow(reshape(x_re3(:,i),[64,64]),);

end

演算法核心mpca.m:

function

[ u_reduce, z, v_retain ] = mpca

( x, k )

% 演算法輸入特徵x和降維後的維度k,輸入降維後的矩陣z和保留的方差比例v_retain和u_reduce

[n, m]= size(x);

% 得到均值,儲存均值影象

u= mean(x');

%imshow(reshape(u,[64,64]),);

%imwrite(uint8(reshape(u, [64,64])),'u.png');

% 去中心化

u= u'

mu= repmat(u, 1, m);

x_mu= x-mu;

%svd

tic[u1, s, v]= svd(x_mu);

toc% 得到u_reduce

u_reduce= u1(:,1:k);

% 計算保留的方差比例

d= diag(s).^2;

v_retain= sum(d(1:k))/ sum(d(1:m));

% 顯示前5個結果

fori= 1:5

subplot(k,1,i)

imshow(reshape(u_reduce(:,i),[64,64]),);

end% %eig

% sigma= (1/m)* (x_mu* x_mu');

% tic

% [u2, d]= eig(sigma);

% toc

% % u_reduce= u2(:,end- k+ 1:end);

% % d= diag(d);

% v_retain= sum(d(1:k))/ sum(d(1:m));

% % for i= 1:k

% subplot(k,1,i)

% imshow(reshape(u_reduce(:,i),[64,64]),);

% end

% 得到降維後的結果z

z= u_reduce'* x_mu;

end

值得注意的是,svd是直接使用去中心化後的矩陣的,與吳恩達課程課件不同。而eig使用的是sigma函式。

主成成份分析 PCA

在很多應用問題中向量的維度會很高,不僅給演算法帶來挑戰,而且會帶來維度災難。pca就是一種經典的無監督學習的線性降維方法。降維的出發點不是聚類,也不是分類,它只是對原始資料的一種變換,可以用更少的維度保持原始資訊最多的資訊。1.計算樣本集的均值向量,將所有的向量減去均值向量,稱為白化。2.計算樣本集...

機器學習之主成份分析PCA詳解與實踐

在pca中,資料從原來的座標系轉換到新的座標系,新座標系的選擇是由資料本身決定的。第乙個新座標軸選擇的是原始資料中方差最大的方向,第二個新座標軸選擇和第乙個座標軸正交且具有最大方差的方向。該過程一直重複,重複次數為原始資料中特徵的數目。我們會發現,大部分方差都包含在最前面的幾個新座標軸中。因此,我們...

機器學習 主成分分析

那麼更好的理解這個過程呢?我們來看一張圖 假設對於給定5個點,資料如下 要求 將這個二維的資料簡化成一維?並且損失少量的資訊 這個過程如何計算的呢?找到乙個合適的直線,通過乙個矩陣運算得出主成分分析的結果 不需要理解 pca.fit transform x x numpy array格式的資料 n ...