昨天有朋友問PCA算法的一些細節問題,今天就寫一篇PCA的文章,主要講述PCA的整個過程以及其中的一些細節問題。
一、PCA過程
1、計算每一個維度的平均值,然後對每一個樣本取值減去其對應維度的平均值,一般情況下還應該進行歸一化。如下圖:
2、求特徵協方差矩陣
3、協方差的特徵值和特徵向量
4、將特徵值按照從大到小的順序排序,選擇其中最大的k個(降維到K維),然後將其對應的k個特徵向量分別作為列向量組成特徵向量矩陣。
5、將原始樣本數據投影到選取的特徵向量上。
比如:假設樣本數為m,特徵數為n,減去均值後的樣本矩陣為DataAdjust(m*n),協方差矩陣是n*n,選取的k個特徵向量組成的矩陣為EigenVectors(n*k)。那麼投影后的數據FinalData為
那麼,問題就來了,為什麼協方差矩陣前K個特徵值對應的方差就是最大的呢?,這就是方差最大理論了。
二、PCA理論基礎
在信號處理中認為信號具有較大的方差,噪聲有較小的方差,信噪比就是信號與噪聲的方差比,越大越好。贗本在那個維度的的投影方差較小,那麼認為那個維度的投影是由噪聲引起的。因此我們認為,最好的k維特徵是將n維樣本點轉換為k維後,每一維上的樣本方差都很大。
比如下圖有5個樣本點:(已經做過預處理,均值為0,特徵方差歸一)
下面將樣本投影到某一維上,這裡用一條過原點的直線表示(前處理的過程實質是將原點移到樣本點的中心點)。
假設我們選擇兩條不同的直線做投影,那麼左右兩條中哪個好呢?根據我們之前的方差最大化理論,左邊的好,因為投影后的樣本點之間方差大一些。
關於樣本點投影的概念,通過下圖可以明白。
u是一個單位向量,也就是說u向量決定我的樣本按照哪個方向映射,這時候方差才大。
由於原始數據已經是0均值的了,因此經過映射之後也是0均值的
我們只需要對協方差矩陣進行特徵值分解,得到的前k大特徵值對應的特徵向量就是最佳的k維新特徵,而且這k維新特徵是正交的。得到前k個u以後,樣例xi通過以下變換可以得到新的樣本。
中間那部分很熟悉啊,不就是樣本特徵的協方差矩陣麼xi的均值為0,上式可以改寫為
由於u是單位向量,即
上式兩邊都左乘u得,
即
這不就是說明方差最大的方向就是按前K個特徵值對應的特徵向量映射的方向嗎。
閱讀更多 機器學習與數據挖掘 的文章