1. 程式人生 > >【機器學習-斯坦福】因子分析(Factor Analysis)

【機器學習-斯坦福】因子分析(Factor Analysis)

1 問題

     之前我們考慮的訓練資料中樣例clip_image002的個數m都遠遠大於其特徵個數n,這樣不管是進行迴歸、聚類等都沒有太大的問題。然而當訓練樣例個數m太小,甚至m<<n的時候,使用梯度下降法進行迴歸時,如果初值不同,得到的引數結果會有很大偏差(因為方程數小於引數個數)。另外,如果使用多元高斯分佈(Multivariate Gaussian distribution)對資料進行擬合時,也會有問題。讓我們來演算一下,看看會有什麼問題:

多元高斯分佈的引數估計公式如下:

     clip_image004

     clip_image006

     分別是求mean和協方差的公式,clip_image002[1]表示樣例,共有m個,每個樣例n個特徵,因此clip_image008是n維向量,

clip_image010是n*n協方差矩陣。

     當m<<n時,我們會發現clip_image010[1]是奇異陣(clip_image012),也就是說clip_image014不存在,沒辦法擬合出多元高斯分佈了,確切的說是我們估計不出來clip_image010[2]

     如果我們仍然想用多元高斯分佈來估計樣本,那怎麼辦呢?

2 限制協方差矩陣

     當沒有足夠的資料去估計clip_image010[3]時,那麼只能對模型引數進行一定假設,之前我們想估計出完全的clip_image010[4](矩陣中的全部元素),現在我們假設clip_image010[5]就是對角陣(各特徵間相互獨立),那麼我們只需要計算每個特徵的方差即可,最後的clip_image010[6]只有對角線上的元素不為0

     clip_image016

     回想我們之前討論過的二維多元高斯分佈的幾何特性,在平面上的投影是個橢圓,中心點由clip_image008[1]決定,橢圓的形狀由clip_image010[7]決定。

clip_image010[8]如果變成對角陣,就意味著橢圓的兩個軸都和座標軸平行了。

     clip_image018

     如果我們想對clip_image010[9]進一步限制的話,可以假設對角線上的元素都是等值的。

     clip_image020

     其中

     clip_image022

     也就是上一步對角線上元素的均值,反映到二維高斯分佈圖上就是橢圓變成圓。

     當我們要估計出完整的clip_image010[10]時,我們需要m>=n+1才能保證在最大似然估計下得出的clip_image010[11]是非奇異的。然而在上面的任何一種假設限定條件下,只要m>=2都可以估計出限定的clip_image010[12]

     這樣做的缺點也是顯然易見的,我們認為特徵間獨立,這個假設太強。接下來,我們給出一種稱為因子分析的方法,使用更多的引數來分析特徵間的關係,並且不需要計算一個完整的

clip_image010[13]

3 邊緣和條件高斯分佈

     在討論因子分析之前,先看看多元高斯分佈中,條件和邊緣高斯分佈的求法。這個在後面因子分析的EM推導中有用。

     假設x是有兩個隨機向量組成(可以看作是將之前的clip_image024分成了兩部分)

     clip_image026

     其中clip_image028clip_image030,那麼clip_image032。假設x服從多元高斯分佈clip_image034,其中

     clip_image035

     其中clip_image037clip_image039,那麼clip_image041clip_image043,由於協方差矩陣是對稱陣,因此clip_image045

     整體看來clip_image047clip_image049聯合分佈符合多元高斯分佈。

     那麼只知道聯合分佈的情況下,如何求得clip_image047[1]的邊緣分佈呢?從上面的clip_image008[2]clip_image010[14]可以看出,

     clip_image051,clip_image053,下面我們驗證第二個結果

     clip_image054

     由此可見,多元高斯分佈的邊緣分佈仍然是多元高斯分佈。也就是說clip_image056

     上面Cov(x)裡面有趣的是clip_image058,這個與之前計算協方差的效果不同。之前的協方差矩陣都是針對一個隨機變數(多維向量)來說的,而clip_image058[1]評價的是兩個隨機向量之間的關係。比如clip_image060={身高,體重},clip_image049[1]={性別,收入},那麼clip_image062求的是身高與身高,身高與體重,體重與體重的協方差。而clip_image058[2]求的是身高與性別,身高與收入,體重與性別,體重與收入的協方差,看起來與之前的大不一樣,比較詭異的求法。

     上面求的是邊緣分佈,讓我們考慮一下條件分佈的問題,也就是clip_image064的問題。根據多元高斯分佈的定義,clip_image066

     且

     clip_image067

     這是我們接下來計算時需要的公式,這兩個公式直接給出,沒有推導過程。如果想了解具體的推導過程,可以參見Chuong B. Do寫的《Gaussian processes》。

4 因子分析例子

     下面通過一個簡單例子,來引出因子分析背後的思想。

     因子分析的實質是認為m個n維特徵的訓練樣例clip_image069的產生過程如下:

     1、 首先在一個k維的空間中按照多元高斯分佈生成m個clip_image071(k維向量),即

     clip_image073

     2、 然後存在一個變換矩陣clip_image075,將clip_image071[1]對映到n維空間中,即

     clip_image077

     因為clip_image071[2]的均值是0,對映後仍然是0。

     3、 然後將clip_image079加上一個均值clip_image008[3](n維),即

     clip_image081

     對應的意義是將變換後的clip_image079[1](n維向量)移動到樣本clip_image002[2]的中心點clip_image008[4]

     4、 由於真實樣例clip_image002[3]與上述模型生成的有誤差,因此我們繼續加上誤差clip_image083(n維向量),

     而且clip_image083[1]符合多元高斯分佈,即

     clip_image085

     clip_image087

     5、 最後的結果認為是真實的訓練樣例clip_image002[4]的生成公式

     clip_image089

     讓我們使用一種直觀方法來解釋上述過程:

     假設我們有m=5個2維的樣本點clip_image002[5](兩個特徵),如下:

clip_image090

     那麼按照因子分析的理解,樣本點的生成過程如下:

     1、 我們首先認為在1維空間(這裡k=1),存在著按正態分佈生成的m個點clip_image092,如下

clip_image095

     均值為0,方差為1。

     2、 然後使用某個clip_image097將一維的z對映到2維,圖形表示如下:

clip_image100

     3、 之後加上clip_image102,即將所有點的橫座標移動clip_image104,縱座標移動clip_image106,將直線移到一個位置,使得直線過點clip_image008[5],原始左邊軸的原點現在為clip_image008[6](紅色點)。

clip_image111

     然而,樣本點不可能這麼規則,在模型上會有一定偏差,因此我們需要將上步生成的點做一些擾動(誤差),擾動clip_image113

     4、 加入擾動後,我們得到黑色樣本clip_image002[6]如下:

clip_image118

     5、 其中由於z和clip_image119的均值都為0,因此clip_image008[7]也是原始樣本點(黑色點)的均值。

     由以上的直觀分析,我們知道了因子分析其實就是認為高維樣本點實際上是由低維樣本點經過高斯分佈、線性變換、誤差擾動生成的,因此高維資料可以使用低維來表示。

5 因子分析模型

     上面的過程是從隱含隨機變數z經過變換和誤差擾動來得到觀測到的樣本點。其中z被稱為因子,是低維的。

     我們將式子再列一遍如下:

     clip_image121

     clip_image085[1]

     clip_image123

     其中誤差clip_image119[1]和z是獨立的。

     下面使用的因子分析表示方法是矩陣表示法,在參考資料中給出了一些其他的表示方法,如果不明白矩陣表示法,可以參考其他資料。

     矩陣表示法認為z和x聯合符合多元高斯分佈,如下

     clip_image125

     求clip_image127之前需要求E[x]

     clip_image129

           clip_image131

           clip_image133

     我們已知E[z]=0,因此

     clip_image135

     下一步是計算clip_image010[15]

     其中clip_image137

     接著求clip_image139

     clip_image140

     這個過程中利用了z和clip_image119[2]獨立假設(clip_image142)。並將clip_image144看作已知變數。

     接著求clip_image146

     clip_image147

     然後得出聯合分佈的最終形式

     clip_image148

     從上式中可以看出x的邊緣分佈clip_image150