1. 程式人生 > >PCA原理解釋(二)

PCA原理解釋(二)

PCA在做資料處理,一般會有一個數據預處理,其中一個目標就是將取資料特徵向相關性。

為什麼要去特徵的相關性?

因為資料如果有相關性,在學習的時候是冗餘的,徒增學習成本;所以對於資料處理(也稱之為白化,英文有的時候稱之為sphering),白化的目的:1.實現特徵之間的相關性較低;2.所有的特徵具有相同的方差。

怎麼去特徵相關性,就是讓他們的協方差為0,協方差,顧名思義,就是兩組變數的協同性,如果兩個變數的變化趨勢是一致的,某個變數範圍內,取值同樣趨於增大、減少,這個時候,協方差就是正常,如果變化趨勢相反,協方差就是正直;那麼如果兩個變數(函式)的變化趨勢無關,協方差取值是0.

如果:E(X)=m,E(Y)=v,協方差公式如下:

cov(X,Y) = E((X-m)(Y-v)) = E(X*Y) - mv

如果E(X)和E(Y)兩者獨立,則協方差為0,這是因為:

E(X*Y) = E(X)E(Y) = mv

這裡在深入講一下,什麼是期望?在學習概率的時候,前面幾章都是在講述分佈(正態分佈,0,1分佈,T分佈),分佈講述的資料的規律,期望講述的一個值,用一個數來代表你的這些數集,這個就是期望,也稱之為均值,我們看一下期望的公式:

 

你就會發現其實無論是離散的概率還是連續的期望都是計算求全平均,這就印證上面說的:找一個數來代表你的這個分佈;在numpy的array裡面有一個mean函式,就是計算期望的。

講到期望,就要說一下中心化(centered),所謂中心化就是列之間的期望為0。或者說PCA認為各個點都是以原點為中心來進行分散的。

 

SVD:奇異值分解,Singular Value Decomposition.

他的思路就是將一個矩陣(無論多複雜)用三個矩陣相乘得來:

其中M就是原始矩陣,U是M.dot(M.T)的特徵向量,V是M.T.dot(M)的向量,Sigma就是一個對角矩陣。裡面的元素就是奇異值。

關於矩陣乘法和特徵值

矩陣的乘法(dot)本質其實是將一個矩陣中的向量從長度(伸縮)到方向(旋轉)進行轉變;如果一個M.dot(N),只是有伸縮但是沒有旋轉,那麼這個N就是M的特徵向量。

那麼迴歸本源,什麼是特徵值,特徵向量?

對於矩陣A,如果存在數m以及向量x,滿足Ax=mx,則成m為A的特徵值,x是矩陣A對於m特徵值的特徵向量。

PCA中的核函式

很多時候,降維是為了減少資料量,提高運算速度;但是有的時候低維度的資料不好對資料進行劃分,這個時候需要將資料提高維度,很多時候,高緯度資料反而更好找到super plane來對資料進行劃分,那麼核函式就是做這件事情的,通過提高維度來進行資料劃分,將底維資料向高維資料做對映的函式,就是"核函式(kernel function)"。在sklearn裡面就有KernelPCA用於為PCA指定核函式。

提到了PCA一定要提一下無偏估計。因為PCA的有一部分就是就協方差的。

方差嘛,本來應該是[X-E(X)]**2,但是主要,你現在出列都是矩陣,所以如果想要實現平方,是需要和他的轉置矩陣相乘來處理的。

 

 

參考:

關於SVD很硬的一篇部落格

https://www.cnblogs.com/lzllovesyl/p/5243370.html