1. 程式人生 > >機器學習演算法(降維)—SVD奇異值分解

機器學習演算法(降維)—SVD奇異值分解

一、SVD奇異值分解的定義

    假設是一個的矩陣,如果存在一個分解:


其中的酉矩陣,的半正定對角矩陣,的共軛轉置矩陣,且為的酉矩陣。這樣的分解稱為的奇異值分解,對角線上的元素稱為奇異值,稱為左奇異矩陣,稱為右奇異矩陣。

二、SVD奇異值分解與特徵值分解的關係

    特徵值分解與SVD奇異值分解的目的都是提取一個矩陣最重要的特徵。然而,特徵值分解只適用於方陣,而SVD奇異值分解適用於任意的矩陣,不一定是方陣。

 

這裡,是方陣,為單位矩陣,的特徵向量,的特徵向量。的特徵值為的奇異值的平方。

三、SVD奇異值分解的作用和意義

    奇異值分解最大的作用就是資料的降維,當然,還有其他很多的作用,這裡主要討論資料的降維,對於
的矩陣,進行奇異值分解

取其前個非零奇異值,可以還原原來的矩陣,即前個非零奇異值對應的奇異向量代表了矩陣的主要特徵。可以表示為

四、實驗的模擬

    我們在手寫體上做實驗,原始矩陣為
原始矩陣 對應的影象為
對應影象 經過SVD分解後的奇異值矩陣為
部分奇異值矩陣 取前14個非零奇異值
前14個非零奇異值 還原原始矩陣B,還原後的影象為
還原後的影象 對比影象
對比影象 MATLAB程式碼
  1. %% 測試奇異值分解過程  
  2. load data.mat;%該檔案是做好的一個手寫體的圖片  
  3. B = zeros(28,28);%將行向量重新轉換成原始的圖片  
  4. for i = 1:28  
  5.     j = 28*(i-1)+1;  
  6.     B(i,:) = A(1,j:j+27);  
  7. end  
  8. %進行奇異值分解  
  9. [U S V] = svd(B);  
  10. %選取前面14個非零奇異值  
  11. for i = 1:14  
  12.     for j = 1:14  
  13.         S_1(i,j) = S(i,j);  
  14.     end  
  15. end  
  16. %左奇異矩陣  
  17. for i = 1:28  
  18.     for j = 1:14  
  19.         U_1(i,j) = U(i,j);  
  20.     end  
  21. end  
  22. %右奇異矩陣  
  23. for i = 1:28  
  24.     for j = 1:14  
  25.         V_1(i,j) = V(i,j);  
  26.     end  
  27. end  
  28. B_1 = U_1*S_1*V_1';  
  29. %同時輸出兩個圖片  
  30. subplot(121);imshow(B);  
  31. subplot(122);imshow(B_1);