簡單講:PCA是一個降維的過程,ICA則是幫助你從多個維度分離有用數據的過程。
特徵降維:去掉可分性不強和冗餘的特徵
經過X的降維轉換Z = XU,X 是 m × n 的矩陣, U 是 n × k 的矩陣,Z 是 m × k 的矩陣,就得到X降維後的降維矩陣Z。
Z的shape=(m, k),記住這裏的降維是降低樣例的特徵維度,所以Z的shape=(m, k),其中m還是樣本矩陣的樣例總數,k是降維後的特徵維度總數。
1.PCA主成分分析原理
PCA的主要支撐理論是協方差以及協方差矩陣,協方差等知識點詳見以前文章的介紹:【機器學習】【線性代數】均值,無偏估計,總體/樣本方差,樣本標準差,矩陣中心化/標準化、協方差,正/不/負相關等,協方差矩陣
在信號處理中認爲信號具有較大的方差,噪音有較小的方差,信噪比就是信號與噪音的方差比,信噪比越大越好。
2.PCA原理和PCA降維原理
此部分先關圖形來自:https://www.jisilu.cn/question/252942
PCA降維原理是基於訓練數據集X的協方差矩陣C的特徵向量組成的K階矩陣U,XU得到X的k階降維矩陣Z。
主要原理用的是協方差矩陣C是一個實對角矩陣的性質!!!!
用到的最重要的性質是:實對角陣的不同特徵值對應的特徵向量是正交的!!!
再結合訓練樣本集X的理想降維矩陣的特點:每個維度特徵線性不相關,即每個維度特徵的協方差=0。
利用以上知識就得到PCA降維的公式啦~~~~,詳細推導過程見下所示:
2.1訓練樣本集
樣本集X=m×n矩陣,表示m個樣例,n個特徵維度
2.2求樣本集X的協方差矩陣C
(1)協方差矩陣是一個實對稱陣
(2)協方差矩陣的對角線上的元素是每個維度的方差
(3)協方差矩陣計算的是一個樣本中不同維度之間的協方差,而不是兩個或多個樣本之間的協方差
2.3用到的協方差矩陣C的一些關鍵性質
因爲協方差矩陣C是一個實對稱陣,所以協方差矩陣C具有實對稱陣的一些特徵:
(1)協方差矩陣C可以對角化
(2)協方差矩陣C的特徵值都是實數
(3)協方差矩陣C的特徵向量都是實向量
(4)協方差矩陣C的相似對角陣上的元素=協方差矩陣C的特徵值
(5)協方差矩陣C的不同特徵值對應的特徵向量是正交的!!!!
2.4根據2.3中C的關鍵性質得到一個對角陣
根據協方差矩陣C是實對稱陣的性質,可以輕鬆得到n 個線性無關的非零特徵向量,這些特徵向量構成的特徵矩陣E滿足:Λ 是一個對角矩陣,除了對角線λ1,λ2,....,λn是非零值,其他位置都是0。
2.5樣本集理想的降維矩陣
訓練樣本集X理想的降維矩陣,應該是一個這樣的矩陣:降維矩陣的每個維度特徵都是線性無關的(即協方差爲0),即降維特徵的每個特徵向量是正交的,集合上說就是垂直的,代數上說就是線性無關的。
下面我們假設:
訓練數據集轉換爲理想的降維矩陣的公式爲 Z=XU,U我們還不知道是什麼,現在也不用知道U具體是什麼,在下面2.6節會求出。
記我們得到訓練樣本集X理想的降維矩陣爲Z,如下所示:
降維矩陣的每個維度特徵都是線性無關的,也就是每個維度特徵相互的協方差爲0,即cov(X,Y)=0,則可知降維矩陣的協方差矩陣爲一個對角陣,記降維矩陣Z的協方差矩陣爲D,是一個對角陣,結果應該如下所示:
以前文章有介紹,協方差矩陣對角線上的值是對應維度特徵的方差,其他位置上的值是對應倆維度特徵的協方差,容易知道,除了對角線上值非0,其他位置上的協方差都爲0,因爲前面說了:降維矩陣的每個維度特徵都是線性無關的,也就是每個維度特徵相互的協方差爲0,即cov(X,Y)=0。
2.6樣本集理想的降維矩陣的求解
可知
(1)訓練數據集轉換爲理想的降維矩陣的公式爲 Z = XU中的U是E
(2)U就是由訓練樣本集X的協方差矩陣C的特徵向量組成的矩陣
(3)降維矩陣Z的協方差矩陣D的對角線上元素就是訓練樣本集X的協方差矩陣C的特徵值
哈哈,是不是很拗口。
我們稱Z = XU中的U爲訓練樣本集X的k階降維矩陣Z的降維轉換矩陣,
從X到Z的這個過程稱爲X的降維過程,U稱爲X的降維轉換矩陣,Z稱爲X的降維矩陣,X是訓練樣本集。
2.7的任務就是給出U的求解過程和Z的求解結果~~~
2.7訓練樣本集X的降維矩陣Z的公式
Step1:計算訓練數據集X的協方差矩陣C
Step2:計算C的特徵值和特徵向量
Step3:特徵值按照數值降序排列,特徵向量按照自己特徵值的順序也依次排列
Step4:如果要得到訓練數據集X的k階降維矩陣,則取前K個特徵向量u1,u2,...,uk,組成降維轉換矩陣U={u1, u2, ..., uk}
Step5:然後經過X的降維轉換Z = XU,X 是 m × n 的矩陣, U 是 n × k 的矩陣,Z 是 m × k 的矩陣,就得到X降維後的降維矩陣Z:
3.PCA計算步驟,實例講解
下面給出PCA降維的計算步驟。
3.1給出訓練樣本集X
'10樣本3特徵的樣本集'
X = np.array([[10, 15, 29],
[15, 46, 13],
[23, 21, 30],
[11, 9, 35],
[42, 45, 11],
[9, 48, 5],
[11, 21, 14],
[8, 5, 15],
[11, 12, 21],
[21, 20, 25]])
3.2樣本集矩陣X中心化
中心化就是每個特徵值減去所在維度特徵的平均值。以X爲例的話就是每個元素減去所在列的平均值。
樣本集的特徵均值:
[ 16.1 24.2 19.8]
樣本集的中心化(每個元素將去當前維度特徵的均值):
[[ -6.1 -9.2 9.2]
[ -1.1 21.8 -6.8]
[ 6.9 -3.2 10.2]
[ -5.1 -15.2 15.2]
[ 25.9 20.8 -8.8]
[ -7.1 23.8 -14.8]
[ -5.1 -3.2 -5.8]
[ -8.1 -19.2 -4.8]
[ -5.1 -12.2 1.2]
[ 4.9 -4.2 5.2]]
3.3計算樣本矩陣的協方差矩陣C
C=[[ 108.32222222 74.53333333 -10.08888889]
[ 74.53333333 260.62222222 -106.4 ]
[ -10.08888889 -106.4 94.17777778]]
3.4求樣本集矩陣X的協方差矩陣C的特徵值和特徵向量
樣本矩陣X的協方差矩陣C的特徵值:
[ 335.15738485 95.32771231 32.63712506]
樣本矩陣X的協方差矩陣C的特徵向量:
[[-0.30253213 -0.87499307 -0.37797014]
[-0.86718533 0.08811216 0.49012839]
[ 0.39555518 -0.47604975 0.78543792]]
3.5構建降維轉換矩陣U
假設K=2,則
按照特徵值最大的top2特徵值對應的特徵向量u1,u2組成U,u1,u2都是列向量
可知u1= (-0.30253213, -0.86718533, 0.39555518), u2=(-0.87499307,0.08811216,-0.47604975)
U=(u1, u2),shape=n×k=3×2
3.6有降維轉換公式Z=XU求得X的降維矩陣Z
U = np.array([[-0.30253213, -0.87499307],
[-0.86718533, 0.08811216],
[ 0.39555518, -0.47604975]])
Z = np.dot(samples, U)
print('樣本矩陣X的2階降維矩陣Z爲:\n', Z)
求得結果爲:樣本矩陣X的2階降維矩陣Z爲:
[[ -4.56200104 -21.2336912 ]
[-39.28629002 -15.26038349]
[-13.30247561 -32.55597794]
[ 2.71190993 -25.49365577]
[-47.37858268 -38.02120912]
[-42.36990935 -6.0258027 ]
[-16.00097294 -14.43926499]
[ -0.822856 -13.7001301 ]
[ -5.42741864 -18.56462272]
[-13.80800193 -28.51385518]]
到此通過以上的步驟,應該很容易和熟練求訓練樣本集矩陣X的K階降維矩陣Z了,Z的shape=(m, k),記住這裏的降維是減少特徵維度,所以Z的shape=(m, k)其中m還是樣本矩陣的樣例總數,k是降維後的特徵維度總數。
參考文獻:
[1]PCA主成分分析(Principal components analysis)
(end)