用Python實現降維和聚類

     在這一篇以前的內容是《Factor Analysis》,因爲很是理論,打算學完整個課程後再寫。在寫這篇以前,我閱讀了PCA、SVD和LDA。這幾個模型相近,卻都有本身的特色。本篇打算先介紹PCA,至於他們之間的關係,只能是邊學邊體會了。PCA之前也叫作Principal factor analysis。函數

1. 問題學習

     真實的訓練數據老是存在各類各樣的問題:blog

一、 好比拿到一個汽車的樣本,裏面既有以「公里/每小時」度量的最大速度特徵,也有「英里/小時」的最大速度特徵,顯然這兩個特徵有一個多餘。排序

二、 拿到一個數學系的本科生期末考試成績單,裏面有三列,一列是對數學的興趣程度,一列是複習時間,還有一列是考試成績。咱們知道要學好數學,須要有濃厚的興趣,因此第二項與第一項強相關,第三項和第二項也是強相關。那是否是能夠合併第一項和第二項呢?圖片

三、 拿到一個樣本,特徵很是多,而樣例特別少,這樣用迴歸去直接擬合很是困難,容易過分擬合。好比北京的房價:假設房子的特徵是(大小、位置、朝向、是否學區房、建造年代、是否二手、層數、所在層數),搞了這麼多特徵,結果只有不到十個房子的樣例。要擬合房子特徵->房價的這麼多特徵,就會形成過分擬合。ip

四、 這個與第二個有點相似,假設在IR中咱們創建的文檔-詞項矩陣中,有兩個詞項爲「learn」和「study」,在傳統的向量空間模型中,認爲二者獨立。然而從語義的角度來說,二者是類似的,並且二者出現頻率也相似,是否是能夠合成爲一個特徵呢?ci

五、 在信號傳輸過程當中,因爲信道不是理想的,信道另外一端收到的信號會有噪音擾動,那麼怎麼濾去這些噪音呢?文檔

     回顧咱們以前介紹的《模型選擇和規則化》,裏面談到的特徵選擇的問題。但在那篇中要剔除的特徵主要是和類標籤無關的特徵。好比「學生的名字」就和他的「成績」無關,使用的是互信息的方法。get

     而這裏的特徵不少是和類標籤有關的,但裏面存在噪聲或者冗餘。在這種狀況下,須要一種特徵降維的方法來減小特徵數,減小噪音和冗餘,減小過分擬合的可能性。數學

     下面探討一種稱做主成分分析(PCA)的方法來解決部分上述問題。PCA的思想是將n維特徵映射到k維上(k<n),這k維是全新的正交特徵。這k維特徵稱爲主元,是從新構造出來的k維特徵,而不是簡單地從n維特徵中去除其他n-k維特徵。

2. PCA計算過程

     首先介紹PCA的計算過程:

     假設咱們獲得的2維數據以下:

     clip_image001[4]

     行表明了樣例,列表明特徵,這裏有10個樣例,每一個樣例兩個特徵。能夠這樣認爲,有10篇文檔,x是10篇文檔中「learn」出現的TF-IDF,y是10篇文檔中「study」出現的TF-IDF。也能夠認爲有10輛汽車,x是公里/小時的速度,y是英里/小時的速度,等等。

     第一步分別求x和y的平均值,而後對於全部的樣例,都減去對應的均值。這裏x的均值是1.81,y的均值是1.91,那麼一個樣例減去均值後即爲(0.69,0.49),獲得

     clip_image002[4]

     第二步,求特徵協方差矩陣,若是數據是3維,那麼協方差矩陣是

     clip_image003[4]

     這裏只有x和y,求解得

     clip_image004[4]

     對角線上分別是x和y的方差,非對角線上是協方差。協方差大於0表示x和y如有一個增,另外一個也增;小於0表示一個增,一個減;協方差爲0時,二者獨立。協方差絕對值越大,二者對彼此的影響越大,反之越小。

     第三步,求協方差的特徵值和特徵向量,獲得

     clip_image005[4]

     上面是兩個特徵值,下面是對應的特徵向量,特徵值0.0490833989對應特徵向量爲clip_image007[4],這裏的特徵向量都歸一化爲單位向量。

    第四步,將特徵值按照從大到小的順序排序,選擇其中最大的k個,而後將其對應的k個特徵向量分別做爲列向量組成特徵向量矩陣。

     這裏特徵值只有兩個,咱們選擇其中最大的那個,這裏是1.28402771,對應的特徵向量是clip_image009[6]

     第五步,將樣本點投影到選取的特徵向量上。假設樣例數爲m,特徵數爲n,減去均值後的樣本矩陣爲DataAdjust(m*n),協方差矩陣是n*n,選取的k個特徵向量組成的矩陣爲EigenVectors(n*k)。那麼投影后的數據FinalData爲

     clip_image011[4]

     這裏是

     FinalData(10*1) = DataAdjust(10*2矩陣)×特徵向量clip_image009[7]

     獲得結果是

     clip_image012[4]

     這樣,就將原始樣例的n維特徵變成了k維,這k維就是原始特徵在k維上的投影。

     上面的數據能夠認爲是learn和study特徵融合爲一個新的特徵叫作LS特徵,該特徵基本上表明瞭這兩個特徵。

     上述過程有個圖描述:

     clip_image013[4]

     正號表示預處理後的樣本點,斜着的兩條線就分別是正交的特徵向量(因爲協方差矩陣是對稱的,所以其特徵向量正交),最後一步的矩陣乘法就是將原始樣本點分別往特徵向量對應的軸上作投影。

     若是取的k=2,那麼結果是

     clip_image014[4]

     這就是通過PCA處理後的樣本數據,水平軸(上面舉例爲LS特徵)基本上能夠表明所有樣本點。整個過程看起來就像將座標系作了旋轉,固然二維能夠圖形化表示,高維就不行了。上面的若是k=1,那麼只會留下這裏的水平軸,軸上是全部點在該軸的投影。

     這樣PCA的過程基本結束。在第一步減均值以後,其實應該還有一步對特徵作方差歸一化。好比一個特徵是汽車速度(0到100),一個是汽車的座位數(2到6),顯然第二個的方差比第一個小。所以,若是樣本特徵中存在這種狀況,那麼在第一步以後,求每一個特徵的標準差clip_image016[6],而後對每一個樣例在該特徵下的數據除以clip_image016[7]

     概括一下,使用咱們以前熟悉的表示方法,在求協方差以前的步驟是:

     clip_image017[4]

     其中clip_image019[6]是樣例,共m個,每一個樣例n個特徵,也就是說clip_image019[7]是n維向量。clip_image021[4]是第i個樣例的第j個特徵。clip_image023[4]是樣例均值。clip_image025[4]是第j個特徵的標準差。

     整個PCA過程貌似及其簡單,就是求協方差的特徵值和特徵向量,而後作數據轉換。可是有沒有以爲很神奇,爲何求協方差的特徵向量就是最理想的k維向量?其背後隱藏的意義是什麼?整個PCA的意義是什麼?

3. PCA理論基礎

     要解釋爲何協方差矩陣的特徵向量就是k維理想特徵,我看到的有三個理論:分別是最大方差理論、最小錯誤理論和座標軸相關度理論。這裏簡單探討前兩種,最後一種在討論PCA意義時簡單概述。

3.1 最大方差理論

     在信號處理中認爲信號具備較大的方差,噪聲有較小的方差,信噪比就是信號與噪聲的方差比,越大越好。如前面的圖,樣本在橫軸上的投影方差較大,在縱軸上的投影方差較小,那麼認爲縱軸上的投影是由噪聲引發的。

所以咱們認爲,最好的k維特徵是將n維樣本點轉換爲k維後,每一維上的樣本方差都很大。

     好比下圖有5個樣本點:(已經作過預處理,均值爲0,特徵方差歸一)

     clip_image026[4]

     下面將樣本投影到某一維上,這裏用一條過原點的直線表示(前處理的過程實質是將原點移到樣本點的中心點)。

     clip_image028[4]

     假設咱們選擇兩條不一樣的直線作投影,那麼左右兩條中哪一個好呢?根據咱們以前的方差最大化理論,左邊的好,由於投影后的樣本點之間方差最大。

     這裏先解釋一下投影的概念:

     QQ截圖未命名

     紅色點表示樣例clip_image037[14],藍色點表示clip_image037[15]在u上的投影,u是直線的斜率也是直線的方向向量,並且是單位向量。藍色點是clip_image037[16]在u上的投影點,離原點的距離是clip_image039[4](即clip_image030[4]或者clip_image041[4])因爲這些樣本點(樣例)的每一維特徵均值都爲0,所以投影到u上的樣本點(只有一個到原點的距離值)的均值仍然是0。

     回到上面左右圖中的左圖,咱們要求的是最佳的u,使得投影后的樣本點方差最大。

     因爲投影后均值爲0,所以方差爲:

     clip_image042[4]

     中間那部分很熟悉啊,不就是樣本特徵的協方差矩陣麼(clip_image037[17]的均值爲0,通常協方差矩陣都除以m-1,這裏用m)。

     用clip_image044[10]來表示clip_image046[4]clip_image048[6]表示clip_image050[4],那麼上式寫做

     clip_image052[4] 

     因爲u是單位向量,即clip_image054[4],上式兩邊都左乘u得,clip_image056[4]

     即clip_image058[4]

     We got it!clip_image044[11]就是clip_image048[7]的特徵值,u是特徵向量。最佳的投影直線是特徵值clip_image044[12]最大時對應的特徵向量,其次是clip_image044[13]第二大對應的特徵向量,依次類推。

     所以,咱們只須要對協方差矩陣進行特徵值分解,獲得的前k大特徵值對應的特徵向量就是最佳的k維新特徵,並且這k維新特徵是正交的。獲得前k個u之後,樣例clip_image037[18]經過如下變換能夠獲得新的樣本。

     clip_image059[4]

     其中的第j維就是clip_image037[19]clip_image061[4]上的投影。

     經過選取最大的k個u,使得方差較小的特徵(如噪聲)被丟棄。

 

3.2 最小平方偏差理論

 

     clip_image001

     假設有這樣的二維樣本點(紅色點),回顧咱們前面探討的是求一條直線,使得樣本點投影到直線上的點的方差最大。本質是求直線,那麼度量直線求的好很差,不只僅只有方差最大化的方法。再回想咱們最開始學習的線性迴歸等,目的也是求一個線性函數使得直線可以最佳擬合樣本點,那麼咱們能不能認爲最佳的直線就是迴歸後的直線呢?迴歸時咱們的最小二乘法度量的是樣本點到直線的座標軸距離。好比這個問題中,特徵是x,類標籤是y。迴歸時最小二乘法度量的是距離d。若是使用迴歸方法來度量最佳直線,那麼就是直接在原始樣本上作迴歸了,跟特徵選擇就沒什麼關係了。

     所以,咱們打算選用另一種評價直線好壞的方法,使用點到直線的距離d’來度量。

     如今有n個樣本點clip_image003,每一個樣本點爲m維(這節內容中使用的符號與上面的不太一致,須要從新理解符號的意義)。將樣本點clip_image005在直線上的投影記爲clip_image007,那麼咱們就是要最小化

     clip_image009

     這個公式稱做最小平方偏差(Least Squared Error)。

     而肯定一條直線,通常只須要肯定一個點,而且肯定方向便可。

     第一步肯定點:

     假設要在空間中找一點clip_image011來表明這n個樣本點,「表明」這個詞不是量化的,所以要量化的話,咱們就是要找一個m維的點clip_image011[1],使得

     clip_image012

     最小。其中clip_image014是平方錯誤評價函數(squared-error criterion function),假設m爲n個樣本點的均值:

     clip_image015

     那麼平方錯誤能夠寫做:

     clip_image017

     後項與clip_image019無關,看作常量,而clip_image021,所以最小化clip_image014[1]時,

     clip_image023 

     clip_image019[1]是樣本點均值。

     第二步肯定方向:

     咱們從clip_image019[2]拉出要求的直線(這條直線要過點m),假設直線的方向是單位向量e。那麼直線上任意一點,好比clip_image007[1]就能夠用點me來表示

     clip_image025 

     其中clip_image027clip_image029到點m的距離。

     咱們從新定義最小平方偏差:

     clip_image030

     這裏的k只是至關於iclip_image032就是最小平方偏差函數,其中的未知參數是clip_image034e

     其實是求clip_image032[1]的最小值。首先將上式展開:

     clip_image036

     咱們首先固定e,將其看作是常量,clip_image038,而後對clip_image027[1]進行求導,得

     clip_image039

     這個結果意思是說,若是知道了e,那麼將clip_image041e作內積,就能夠知道了clip_image043e上的投影離m的長度距離,不過這個結果不用求都知道。

     而後是固定clip_image027[2],對e求偏導數,咱們先將公式(8)代入clip_image032[2],得 

     clip_image044

     其中clip_image045 與協方差矩陣相似,只是缺乏個分母n-1,咱們稱之爲散列矩陣(scatter matrix)。

     而後能夠對e求偏導數,可是e須要首先知足clip_image038[1],引入拉格朗日乘子clip_image047,來使clip_image049最大(clip_image032[3]最小),令

     clip_image050

     求偏導

     clip_image051

     這裏存在對向量求導數的技巧,方法這裏很少作介紹。能夠去看一些關於矩陣微積分的資料,這裏求導時能夠將clip_image049[1]看做是clip_image053,將clip_image055看作是clip_image057

     導數等於0時,得

     clip_image058

     兩邊除以n-1就變成了,對協方差矩陣求特徵值向量了。

     從不一樣的思路出發,最後獲得同一個結果,對協方差矩陣求特徵向量,求得後特徵向量上就成爲了新的座標,以下圖:

     clip_image059

     這時候點都彙集在新的座標軸周圍,由於咱們使用的最小平方偏差的意義就在此。

4. PCA理論意義

     PCA將n個特徵降維到k個,能夠用來進行數據壓縮,若是100維的向量最後能夠用10維來表示,那麼壓縮率爲90%。一樣圖像處理領域的KL變換使用PCA作圖像壓縮。但PCA要保證降維後,還要保證數據的特性損失最小。再看回顧一下PCA的效果。通過PCA處理後,二維數據投影到一維上能夠有如下幾種狀況:

     clip_image060

     咱們認爲左圖好,一方面是投影后方差最大,一方面是點到直線的距離平方和最小,並且直線過樣本點的中心點。爲何右邊的投影效果比較差?直覺是由於座標軸之間相關,以致於去掉一個座標軸,就會使得座標點沒法被單獨一個座標軸肯定。

     PCA獲得的k個座標軸其實是k個特徵向量,因爲協方差矩陣對稱,所以k個特徵向量正交。看下面的計算過程。

     假設咱們仍是用clip_image062來表示樣例,m個樣例,n個特徵。特徵向量爲eclip_image064表示第i個特徵向量的第1維。那麼原始樣本特徵方程能夠用下面式子來表示:

     前面兩個矩陣乘積就是協方差矩陣clip_image066(除以m後),原始的樣本矩陣A是第二個矩陣m*n。

     clip_image068

     上式能夠簡寫爲clip_image070
 

     咱們最後獲得的投影結果是clip_image072,E是k個特徵向量組成的矩陣,展開以下:

     clip_image074

     獲得的新的樣例矩陣就是m個樣例到k個特徵向量的投影,也是這k個特徵向量的線性組合。e之間是正交的。從矩陣乘法中能夠看出,PCA所作的變換是將原始樣本點(n維),投影到k個正交的座標系中去,丟棄其餘維度的信息。舉個例子,假設宇宙是n維的(霍金說是11維的),咱們獲得銀河系中每一個星星的座標(相對於銀河系中心的n維向量),然而咱們想用二維座標去逼近這些樣本點,假設算出來的協方差矩陣的特徵向量分別是圖中的水平和豎直方向,那麼咱們建議以銀河系中心爲原點的x和y座標軸,全部的星星都投影到x和y上,獲得下面的圖片。然而咱們丟棄了每一個星星離咱們的遠近距離等信息。

相關文章
相關標籤/搜索