任務:主成分分析:步驟、應用及代碼實現。代碼可以用任何你熟悉的編程語言。
文章目錄
(一)PCA及其步驟
“主成分分析”是對於原先提出的所有變量,將重複的變量(關係緊密的變量)刪去多餘,建立儘可能少的新變量,使得這些新變量是兩兩不相關的,而且這些新變量在反映課題的信息方面儘可能保持原有的信息。 設法將原來變量重新組合成一組新的互相無關的幾個綜合變量,同時根據實際需要從中可以取出幾個較少的綜合變量儘可能多地反映原來變量的信息的統計方法叫做主成分分析或稱主分量分析(PCA),也是數學上用來降維的一種方法。”
PCA的步驟:
設有m條n維數據
- 將原始數據按列組成n行m列矩陣X。
- 將X的每一行(代表一個屬性字段)進行零均質化,即減去這一行的均值。
- 求出協方差矩陣。
- 求出協方差矩陣的特徵值及對應的特徵向量。
- 將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P。
- 即爲降維到k維後的數據。
1.1零均質化
進行零均質化,就是減去這一行的均值。
1.2求出協方差矩陣
協方差矩陣,一般而言,可視作方差和協方差兩部分組成,方差構成了對角線上的元素,協方差構成了非對角線上的元素。
方差和協方差的定義
方差用來度量單個隨機變量的離散程度
協方差用來刻畫兩個隨機變量的相似程度。
方差計算公式:
其中,表示樣本量,符號表示觀測樣本的均值。
協方差計算公式:
在公式中,符號,分別表示兩個隨機變量所對應的觀測樣本均值。
方差/協方差得到協方差矩陣
根據方差的定義,給定個隨機變量,,則這些隨機變量的方差爲
表示隨機變量中的第個觀測樣本,表示樣本量,每個隨機變量所對應的觀測樣本數量均爲。
根據這些隨機變量,我們可以根據協方差的定義,求出兩兩之間的協方差,即
因此,協方差矩陣爲:
可知,矩陣爲對稱矩陣,其大小爲。
1.3求出協方差矩陣的特徵值和特徵向量
特徵值和特徵向量表達了線性變換的特徵。在物理意義上,一個高維空間的線性變換可以想象是在對一個向量在各個方向上進行了不同程度的變換,而特徵向量之間是線性無關的,它們對應了最主要的變換方向,同時特徵值表達了相應的變換程度。
求特徵向量,就是把矩陣A所代表的空間進行正交分解,使得A的向量集合可以表示爲每個向量a在各個特徵向量上的投影長度。
(二)PCA的應用
PCA是一種數據降維算法,它應用的條件是數據/特徵之間具有明顯的線性相關性。
從數學上理解,它是一種矩陣分解算法。
從物理意義上理解,它是線性空間上的線性變換。
它可以用於數據可視化、數據壓縮存儲、異常檢測、特徵匹配與距離計算等。
(三)PCA實現的MATLAB代碼
clear all
%% 5個樣本,每個樣本2個特徵,k=1
x=[-1 -2;
-1 0;
0 0;
2 1;
0 1];
x=x';
k=1;
N=size(x);
col=N(1);
vol=N(2);
%% 零均值化
for i=1:col %每一行
M=mean(x(i,:));
for j=1:vol
x(i,j)=x(i,j)-M;
end
end
%% 計算協方差矩陣
C=cov(x');
%% 計算協方差矩陣的特徵值V,特徵向量D
[V,D]=eig(C);
%% 將特徵向量按降序排序
d=diag(D);
eig1=sort(d,'descend');
v=fliplr(V);
%% 取前k行組成矩陣P
P=v(1:k,:);
%% 得到降維後的數據
Y=P*x