主成分分析


學習視頻:【強烈推薦】清風:數學建模算法、編程和寫作培訓的視頻課程以及Matlab

老師講得很詳細,很受用!!!

定義

主成分分析(PrincipalComponentAnalysis,PCA), 主成分分析是一種降維算法,它能將多個指標轉換為少數幾 個主成分,這些主成分是原始變量的線性組合,且彼此之間互不相關,其能反映出原始數據的大部分信息。一般來說, 當研究的問題涉及到多變量且變量之間存在很強的相關性時, 我們可考慮使用主成分分析的方法來對數據進行簡化。

主成分分析是把原來多個變量划為少數幾個綜合指標的一種統計分析方法。

降維

降維是將高維度的數據(指標太多)保留下最重要的一些特征,去除噪聲和不重要的特征,從而實現提升數據處理速度 的目的。 在實際的生產和應用中,降維在一定的信息損失范圍內, 可以為我們節省大量的時間和成本。降維也成為應用非常廣泛 的數據預處理方法。
降維具有如下一些優點:

  1. 使得數據集更易使用;
  2. 降低算法的計算開銷;
  3. 去除噪聲;
  4. 使得結果容易理解。

數學思想

每一行是一個樣本,每一列是一個指標。

PCA詳細的證明過程可看視頻:https://www.bilibili.com/video/av32709936 (證明過程需要一定的多元統計基礎和較強的線性代數基礎)

計算步驟

標准化目的是消除量綱,歸一化目的是便於解釋

實例分析

問題1

計算關鍵變量

經過計算,相關系數矩陣的特征值、相應的特征向量以及貢獻率列於下表:

從表中可以看到前三個主成分的累計貢獻率達85.9%>80.0%,因此可以考慮 只取前面三個主成分,它們能夠很好地概括原始變量。

corrcoef函數計算相關系數矩陣。

matlab球的特征值默認歸一化。

貢獻率的計算是根據特征值/特征值總和計算而來。

寫出主成分並簡要分析

\(X_{i}\)均是標准化后的指標,\(x_{i}\):身高、坐高、胸圍、手臂長、肋圍和腰圍

第一主成分\(F_{1}\)對所有(標准化)原始變量都有近似相等的正載荷,故稱第一主成分為(身材)大小成分。
第二主成分\(F_{2}\)及在\(X_{3}, X_{5}, X_{6}\)。上有中等程度的正載荷,而在\(X_{1}, X_{2}, X_{4}\)上有中等程度的負載荷,稱第二主成分為形狀成分(或胖瘦成分)。
第三主成分\(F_{3}\)\(X_{2}\)上有大的正載荷,在\(X_{4}\)上有大的負載荷,而在其余變量上的載荷都較小,可稱第三主成分為臂長成分。
注:由於第三主成分的貢獻率不高(7.65%)且實際意義也不太重要,因此我們也可以考慮只取前兩個主成分進行分析。

主成分分析的說明

​ 在主成分分析中,我們首先應保證所提取的前幾個主成分的累計貢 獻率達到一個較高的水平,其次對這些被提取的主成分必須都能夠給出 符合實際背景和意義的解釋。

主成分的解釋其含義一般多少帶有點模糊性,不像原始變量的含義 那么清楚、確切,這是變量降維過程中不得不付出的代價。

因此,提取 的主成分個數m通常應明顯小於原始變量個數p(除非p本身較小),否 則維數降低的“利”可能抵不過主成分含義不如原始變量清楚的“弊”。 如果原始變量之間具有較高的相關性,則前面少數幾個主成分的累 計貢獻率通常就能達到一個較高水平,也就是說,此時的累計貢獻率通 常較易得到滿足。

主成分分析的困難之處主要在於要能夠給出主成分的較好解釋,所 提取的主成分中如有一個主成分解釋不了,整個主成分分析也就失敗了。

主成分分析是變量降維的一種重要、常用的方法,簡單的說,該方法要應用得成功,一是靠原始變量的合理選取,二是靠“運氣”。

​ ——參考教材:《應用多元統計分析》王學民

問題2

計算關鍵變量

由上表可知,前兩個主成分的累計貢獻率已高達93.7%,第一主成分 F1在所有變量上有幾乎相等的正載荷,可稱為在徑賽項目上的強弱成分。 第二主成分F2在各個指標上的載荷基本上逐個遞減,反映了速度與耐力成績的對比。

代碼

clear;clc
 load data1.mat   % 主成分聚類
%  load data2.mat   % 主成分回歸

% 注意,這里可以對數據先進行描述性統計
% 描述性統計的內容見第5講.相關系數
[n,p] = size(x);  % n是樣本個數,p是指標個數

%% 第一步:對數據x標准化為X
X=zscore(x);   % matlab內置的標准化函數(x-mean(x))/std(x)

%% 第二步:計算樣本協方差矩陣
R = cov(X);

%% 注意:以上兩步可合並為下面一步:直接計算樣本相關系數矩陣
R = corrcoef(x);
disp('樣本相關系數矩陣為:')
disp(R)

%% 第三步:計算R的特征值和特征向量
% 注意:R是半正定矩陣,所以其特征值不為負數
% R同時是對稱矩陣,Matlab計算對稱矩陣時,會將特征值按照從小到大排列哦
% eig函數的詳解見第一講層次分析法的視頻
[V,D] = eig(R);  % V 特征向量矩陣  D 特征值構成的對角矩陣


%% 第四步:計算主成分貢獻率和累計貢獻率
lambda = diag(D);  % diag函數用於得到一個矩陣的主對角線元素值(返回的是列向量)
lambda = lambda(end:-1:1);  % 因為lambda向量是從小大到排序的,我們將其調個頭
contribution_rate = lambda / sum(lambda);  % 計算貢獻率
cum_contribution_rate = cumsum(lambda)/ sum(lambda);   % 計算累計貢獻率  cumsum是求累加值的函數
disp('特征值為:')
disp(lambda')  % 轉置為行向量,方便展示
disp('貢獻率為:')
disp(contribution_rate')
disp('累計貢獻率為:')
disp(cum_contribution_rate')
disp('與特征值對應的特征向量矩陣為:')
% 注意:這里的特征向量要和特征值一一對應,之前特征值相當於顛倒過來了,因此特征向量的各列需要顛倒過來
%  rot90函數可以使一個矩陣逆時針旋轉90度,然后再轉置,就可以實現將矩陣的列顛倒的效果
V=rot90(V)';
disp(V)


%% 計算我們所需要的主成分的值
m =input('請輸入需要保存的主成分的個數:  ');
F = zeros(n,m);  %初始化保存主成分的矩陣(每一列是一個主成分)
for i = 1:m
    ai = V(:,i)';   % 將第i個特征向量取出,並轉置為行向量
    Ai = repmat(ai,n,1);   % 將這個行向量重復n次,構成一個n*p的矩陣
    F(:, i) = sum(Ai .* X, 2);  % 注意,對標准化的數據求了權重后要計算每一行的和
end

%% (1)主成分聚類 : 將主成分指標所在的F矩陣復制到Excel表格,然后再用Spss進行聚類
% 在Excel第一行輸入指標名稱(F1,F2, ..., Fm)
% 雙擊Matlab工作區的F,進入變量編輯中,然后復制里面的數據到Excel表格
% 導出數據之后,我們后續的分析就可以在Spss中進行。

%%(2)主成分回歸:將x使用主成分得到主成分指標,並將y標准化,接着導出到Excel,然后再使用Stata回歸
% Y = zscore(y);  % 一定要將y進行標准化哦~
% 在Excel第一行輸入指標名稱(Y,F1, F2, ..., Fm)
% 分別雙擊Matlab工作區的Y和F,進入變量編輯中,然后復制里面的數據到Excel表格
% 導出數據之后,我們后續的分析就可以在Stata中進行。

對結果的解釋

​ 從上表可以看出,前兩個和前三個主成分的累計貢獻率分別達到80.6%和 87.8%,第一主成分F1在所有變量(除在x2上的載荷稍偏小外)上都有近似相等的 正載荷,反映了綜合消費性支出的水平,因此第一主成分可稱為綜合消費性支出成分。第二主成分F2在變量x2上有很高的正載荷,在變量x4上有中等的正載 荷,而在其余變量上有負載荷或很小的正載荷。可以認為這個主成分度量了受 地區氣候影響的消費性支出(主要是衣着,其次是醫療保健)在所有消費性支出 中占的比重(也可理解為一種消費傾向),第二主成分可稱為消費傾向成分。第 三主成分很難給出明顯的解釋,因此我們只取前面兩個主成分。

應用

主成分分析的濫用:主成分得分

除了王老師說的幾點原因之外,

補充:

(1)主成分是降維算法,你既然已經有數據了,為什么不把這些數據的信息 全部用上呢?主成分分析是會損失原始數據的信息的。

(2)指標可能有各種類型(極大、極小、區間等),主成分只有標准化的過 程,並沒有正向化的過程。

主成分分析用於聚類

計算出第一主成分和第二主成分的值,將其視為兩個新的指標 (可以在圖上直觀的展示各樣本的分布情況)。

%% 計算我們所需要的主成分的值
m =input('請輸入需要保存的主成分的個數:  ');
F = zeros(n,m);  %初始化保存主成分的矩陣(每一列是一個主成分)
for i = 1:m
    ai = V(:,i)';   % 將第i個特征向量取出,並轉置為行向量
    Ai = repmat(ai,n,1);   % 將這個行向量重復n次,構成一個n*p的矩陣
    F(:, i) = sum(Ai .* X, 2);  % 注意,對標准化的數據求了權重后要計算每一行的和
end

%% (1)主成分聚類 : 將主成分指標所在的F矩陣復制到Excel表格,然后再用Spss進行聚類
% 在Excel第一行輸入指標名稱(F1,F2, ..., Fm)
% 雙擊Matlab工作區的F,進入變量編輯中,然后復制里面的數據到Excel表格
% 導出數據之后,我們后續的分析就可以在Spss中進行。

將主成分指標所在的F矩陣復制到Excel表格,然后再用Spss進行聚類

  • 在Excel第一行輸入指標名稱(F1,F2, ..., Fm)

  • 雙擊Matlab工作區的F,進入變量編輯中,然后復制里面的數據到Excel表格

  • 導出數據之后,我們后續的分析就可以在Spss中進行。

結果比較

聚類效果圖

​ 主成分聚類最大的意義就是能幫我們可視化最后的聚類效果,畢竟, 使用主成分是會降低部分信息的。言外之意,只有在指標個數特別多,且指標之間存在很強的相關性時才用主成分聚類。否則會損失很多信息。

主成分回歸

主成分回歸可用來解決多重共線性的問題。

等我弄完多重共線性問題再補。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM