PCA主成分分析 matlab 函數 程序

% PCA主成分分析函數
% dataSet 原始數據(即需要降維的數據,n維,列爲維數)
% k 需要降到的維數
% FinalData 降維後的數據
% reconData 降維後的數據恢復得到的原始數據
% 

function [ FinalData,reconData ] = PCA( dataSet, k )  
    [m,n] = size(dataSet);  % m個n維數據
  
   %% 去除平均值  
    %取平均值  
    dataSetMean = mean(dataSet);  
    %減去平均值  
    dataSetAdjust = zeros(m,n);  
    for i = 1 : m  
        dataSetAdjust(i , :) = dataSet(i , :) - dataSetMean;  
    end  
  
    %% 計算協方差矩陣  
    dataCov = cov(dataSetAdjust);  
  
    %% 計算協方差矩陣的特徵值D與特徵向量V  
    [V, D] = eig(dataCov);  
      
    % 將特徵值矩陣轉換成向量  
    d = zeros(1, n);  
    for i = 1:n  
        d(1,i) = D(i,i);  
    end  
      
    %% 對特徵值排序  
    [maxD, index] = sort(d);  
      
    %% 選取前k個最大的特徵值  
    % maxD_k = maxD(1, (n-k+1):n);  
    index_k = index(1, (n-k+1):n);  
    % 對應的特徵向量  
    V_k = zeros(n,k);  
    for i = 1:k  
        V_k(:,i) = V(:,index_k(1,i));  
    end  
      
    %% 轉換到新的空間  
    FinalData = dataSetAdjust*V_k;  
      
    % 在原圖中找到這些點  
    reconData = FinalData * V_k';  
    for i = 1 : m  
        reconData(i , :) = reconData(i , :) + dataSetMean;  
    end  
end  

 

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