1. 程式人生 > >深度學習不深度-PCA與AutoEncoder

深度學習不深度-PCA與AutoEncoder

1.AutoEncoder

AutoEncoder稱之為自編碼器,自編碼器過程如下:

我們的目標是使得 x和\tilde{x} 越接近越好。x經過Encoder後得到y(code)可以看作是一個降維的過程,因此與PCA類似。AutoEncoder原理十分簡單,可以利用y(code)做分類,在y(code)較少的情況下,則需要考慮加入噪音來平衡。

2. PCA涉及數學知識

PCA是一種資料分析方法,將原始資料變換成一組各維度線性無關的表示,可以用來提取主要特徵,進而實現降維。眾所周知,在機器學習演算法中,演算法的複雜度與資料的維度是緊密相關的,因此提取資料的主要特徵來降低演算法的複雜度是一個不錯的選擇。

相關性:

兩個變數的關聯程度。舉個例子:電商某一商品的銷量與訪問量相關,一般情況下訪問量高,銷量也高,如果此時刪除訪問量,根據銷量也可以推出訪問量的大小(反之亦然),因此訪問量這個屬性對資料分析影響不大。再舉個例子:新生入學,男女選項有兩個,設定為0和1,即非男即女(陰陽人不算),如果在男女結果兩列中刪除一列,可以根據一列推出另一列的值。上面兩個例子都可以看出本來兩個屬性(欄位),刪除其中一個,依然可以根據另一個推出,這就是直觀理解降維過程了。

內積幾何解釋:向量A和向量BA \cdot B=|A|*cos( \alpha )*|B|,也就是AB上的投影長度 \times B的模。

基:線上性代數中,基(也稱為基底)是描述、刻畫向量空間的基本工具。向量空間的基是它的一個特殊的子集,基的元素稱為基向量。向量空間中任意一個元素,都可以唯一地表示成基向量的線性組合。如果基中元素個數有限,就稱向量空間為有限維向量空間,將元素的個數稱作向量空間的維數-----來自百度百科。說來說去,基就類似於一個單位,某一個向量可以表示為基向量的線性組合,基向量的維度決定了變換後向量的維度,因此在降維中可以選擇維度較小的基。

問題在於:在PCA降維過程中如何合理的選擇基呢?(先留著,最後回答)

具體問題:在儘量保持原有二維資料的資訊的基礎上,如何用一維資料來表示二維資料呢?

採用的方法是:選取一條直線,把所有二維上的點投影到該直線上,計算出新的座標,最合理的直線選擇就是希望投影后的投影值儘可能的分散,這樣對原有資料影響最小。

方差:在數學上有一個術語可以用來衡量資料的分散程度,那就是方差。

如果把資料a中所有欄位都去均值,則方差就如下:

此時降維問題就可以表示為:尋找一個低維度的基,使得所有資料在新基上表示後,新的座標(值)方差最大。

協方差:對於高維(3維以上),我們希望找到一個方向,使得向量投影后的方差最大,但如果低維有2個以上分量該如何做呢?(如何投影?)此時就不能像在2維降低到一維一樣投影了。在利用新的基變換後的欄位儘可能表示更多的原始資訊,同時希望變換後的欄位(分量)之間無相關性,否則就重複表示了(見相關性

解釋)。在數學上,協方差可以表示相關性,協方差為0的兩個隨機變數不相關,但是不一定獨立。

降維優化的目標直觀表達:將一組N維向量降低至K維(K>0,K<N),目標是選擇K個單位(模為1)的正交基,使得原始資料變換到這組基上後,各欄位兩兩間協方差為0,而欄位的方差則儘可能大(在正交的約束下,取最大的K個方差)。

矩陣乘法:在連結中第1,2節有介紹。矩陣乘法可以看作是(行/列)向量的線性組合。

協方差矩陣:上面我們匯出了優化目標,但沒有說怎麼做。所以我們要繼續在數學上研究計算方案。我們看到,最終要達到的目的與欄位內方差及欄位間協方差有密切關係。因此我們希望能將兩者統一表示,仔細觀察發現,兩者均可以表示為內積的形式,而內積又與矩陣相乘密切相關。於是我們來了靈感:假設我們只有a和b兩個欄位,那麼我們將它們按行組成矩陣X:

然後讓 X*X^{T} ,再乘係數 1/m 得到如下:

這個矩陣對角線上的兩個元素分別是兩個欄位的方差,而其它元素是a和b的協方差,兩者被統一到了一個矩陣中。

設我們有m個n維資料記錄,將其按列排成n乘m的矩陣X,設C= \frac{1}{m}XX^{T} ,則C是一個對稱矩陣,其對角線分別個各個欄位的方差,而第i行j列和j行i列元素相同,表示i和j兩個欄位的協方差。

協方差對角化:根據上述推導,我們發現要達到優化目前,等價於將協方差矩陣對角化:即除對角線外的其它元素化為0,並且在對角線上將元素按大小從上到下排列,這樣我們就達到了優化目的。我們進一步看下原矩陣與基變換後矩陣協方差矩陣的關係:

此時優化目標變為:尋找一個矩陣P,滿足 PCP^{T} 是一個對角矩陣,並且對角元素按從大到小依次排列,那麼P的前K行就是要尋找的基,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維並滿足上述優化條件。

由上文知道,協方差矩陣C是一個是對稱矩陣,線上性代數上,實對稱矩陣有一系列非常好的性質:

1)實對稱矩陣不同特徵值對應的特徵向量必然正交。

2)設特徵向量λ重數為r,則必然存在r個線性無關的特徵向量對應於λ,因此可以將這r個特徵向量單位正交化。

由上面兩條可知,一個n行n列的實對稱矩陣一定可以找到n個單位正交特徵向量,設這n個特徵向量為 e_{1},e_{2}...e_{n} ,按列組成矩陣: E=(e_{1},e_{2}...e_{n})

在此處已經找到了矩陣P, P=E^{T} 。P是協方差矩陣的特徵向量單位化後按行排列出的矩陣,其中每一行都是C的一個特徵向量。如果設P按照Λ中特徵值的從大到小,將特徵向量從上到下排列,則用P的前K行組成的矩陣乘以原始資料矩陣X,就得到了我們需要的降維後的資料矩陣Y。

介紹完了PCA數學過程,下面給出PCA的演算法過程:

3. PCA演算法過程

總結一下PCA的演算法步驟:

設有m條n維資料。

1)將原始資料按列組成n行m列矩陣X

2)將X的每一行(代表一個屬性欄位)進行零均值化,即減去這一行的均值

3)求出協方差矩陣 C=\frac{1}{m}XX^{T}

4)求出協方差矩陣的特徵值及對應的特徵向量

5)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P

6)Y=PX即為降維到k維後的資料