MATLAB實現主成分分析 PCA

2021-09-25 21:27:30 字數 2181 閱讀 6794

function [ ds,com_num,pv,new_score,new_score_s ] = pca_dr( a,t )

%pca_dr 主成分降維及分析函式

% 輸入變數

% a:原始資料(未標準化處理)

% t:設定累積貢獻率的閾值

% 輸出變數

% ds:特徵值及貢獻率

% com_num:閾值t對應的主成分數

% pv:閾值t對應的特徵向量

% new_score:主成分分數(篩選出來的主成分向量的各樣本分數)

% new_score_s:主成分分數排序(第一列為原樣本的排名,第二列為該樣本主成分總分)

%% 原始資料的標準化處理(transfer orginal data to standard data)

a = size(a,1); % get the row number of a

b = size(a,2); % get the column number of a

sa = zeros(size(a));

for i = 1:b

sa(:,i) = (a(:,i)-mean(a(:,i)))/std(a(:,i)); % matrix normalization(標準化後的矩陣)

end%% 計算樣本相關係數矩陣(calculate correlation matrix of a.)

cm = corrcoef(sa); %cm為相關係數矩陣

%% 計算相關係數矩陣的特徵值和特徵向量

% calculate eigenvectors and eigenvalues of correlation matrix.

[v, d] = eig(cm); %v為特徵向量,d為特徵值(對角線)

%% 選擇重要的主成分

% get the eigenvalue sequence according to descending and the corrosponding

% attribution rates and accumulation rates.

% 1.根據下降以及相應的歸屬率和累積率得到特徵值序列。

ds = zeros(b,3);

for j=1:b

ds(j,1) = d(b+1-j, b+1-j); %ds第一列是d中對角線從右下向左上排列後的值

endfor i=1:b

ds(i,2) = ds(i,1)/sum(ds(:,1)); %ds第二列是該特徵值佔特徵值總和的百分比

ds(i,3) = sum(ds(1:i,1))/sum(ds(:,1)); %累積貢獻率

end% 2.計算主成分數量(calculate the numvber of principal components.)

for k = 1:b

if ds(k,3)>=t

com_num = k; %主成分的個數

break;

endend% 3.獲取特徵向量(get the eigenvectors of the com_num principal components)

for j = 1:com_num

pv(:,j) = v(:,b+1-j); %對應主成分個數的幾個特徵向量

end%% 計算主成分得分(calculate the new socres of the orginal items)

new_score = sa*pv;

for i=1:a

total_score(i,2) = sum(new_score(i,:));

total_score(i,1) = i;

endnew_score_s = sortrows(total_score,-2); %-2表示按第二列進行降序排序

%% 輸出樣式舉例

disp('特徵值及貢獻率(ds):')

disp(ds)

disp('閾值t對應的主成分個數(com_num)與特徵向量(pv):')

disp(com_num)

disp(pv)

disp('樣本的主成分分數(new_score):')

disp(new_score)

disp('樣本的主成分分數排序(new_score_s):')

disp(new_score_s)

end

主成分分析Matlab實現

資料匯入及處理 clcclear all a xlsread coach.xlsx b2 h16 資料標準化處理 a size a,1 b size a,2 for i 1 b sa i a i mean a i std a i end 計算相關係數矩陣的特徵值和特徵向量 cm corrcoef s...

Matlab 主成分分析(PCA)

是一種資料降維方法。保留具有代表性的主成分,捨棄比重較小的成分。演算法步驟 matlab 實現 clear all close all clc load data.mat m,n size x step1 預處理資料。均值標準化 零均值 特徵縮放 x x repmat mean x 50,1 s s...

主成分分析

主成分分析 pca 分析乙個隨機向量的中的主成分 主成分一般不是隨機向量中的某乙個分量,而是不同分量的線性組合,根據資訊理論的觀點,資訊的多少與方差有關,所以 主成分是方差最大的幾個成分 主成分分析的方法是求隨機向量的協方差矩陣 用樣本協方差矩陣代替 對於差異較大的資料,可採用相關矩陣代替協方差矩陣...