【機器學習-斯坦福】因子分析(Factor Analysis)
1 問題
之前我們考慮的訓練資料中樣例的個數m都遠遠大於其特徵個數n,這樣不管是進行迴歸、聚類等都沒有太大的問題。然而當訓練樣例個數m太小,甚至m<<n的時候,使用梯度下降法進行迴歸時,如果初值不同,得到的引數結果會有很大偏差(因為方程數小於引數個數)。另外,如果使用多元高斯分佈(Multivariate Gaussian distribution)對資料進行擬合時,也會有問題。讓我們來演算一下,看看會有什麼問題:
多元高斯分佈的引數估計公式如下:
分別是求mean和協方差的公式,表示樣例,共有m個,每個樣例n個特徵,因此是n維向量,
當m<<n時,我們會發現是奇異陣(),也就是說不存在,沒辦法擬合出多元高斯分佈了,確切的說是我們估計不出來。
如果我們仍然想用多元高斯分佈來估計樣本,那怎麼辦呢?
2 限制協方差矩陣
當沒有足夠的資料去估計時,那麼只能對模型引數進行一定假設,之前我們想估計出完全的(矩陣中的全部元素),現在我們假設就是對角陣(各特徵間相互獨立),那麼我們只需要計算每個特徵的方差即可,最後的只有對角線上的元素不為0
回想我們之前討論過的二維多元高斯分佈的幾何特性,在平面上的投影是個橢圓,中心點由決定,橢圓的形狀由決定。
如果我們想對進一步限制的話,可以假設對角線上的元素都是等值的。
其中
也就是上一步對角線上元素的均值,反映到二維高斯分佈圖上就是橢圓變成圓。
當我們要估計出完整的時,我們需要m>=n+1才能保證在最大似然估計下得出的是非奇異的。然而在上面的任何一種假設限定條件下,只要m>=2都可以估計出限定的。
這樣做的缺點也是顯然易見的,我們認為特徵間獨立,這個假設太強。接下來,我們給出一種稱為因子分析的方法,使用更多的引數來分析特徵間的關係,並且不需要計算一個完整的
3 邊緣和條件高斯分佈
在討論因子分析之前,先看看多元高斯分佈中,條件和邊緣高斯分佈的求法。這個在後面因子分析的EM推導中有用。
假設x是有兩個隨機向量組成(可以看作是將之前的分成了兩部分)
那麼只知道聯合分佈的情況下,如何求得的邊緣分佈呢?從上面的和可以看出,
由此可見,多元高斯分佈的邊緣分佈仍然是多元高斯分佈。也就是說。
上面Cov(x)裡面有趣的是,這個與之前計算協方差的效果不同。之前的協方差矩陣都是針對一個隨機變數(多維向量)來說的,而評價的是兩個隨機向量之間的關係。比如={身高,體重},={性別,收入},那麼求的是身高與身高,身高與體重,體重與體重的協方差。而求的是身高與性別,身高與收入,體重與性別,體重與收入的協方差,看起來與之前的大不一樣,比較詭異的求法。
上面求的是邊緣分佈,讓我們考慮一下條件分佈的問題,也就是的問題。根據多元高斯分佈的定義,。
且
這是我們接下來計算時需要的公式,這兩個公式直接給出,沒有推導過程。如果想了解具體的推導過程,可以參見Chuong B. Do寫的《Gaussian processes》。
4 因子分析例子
下面通過一個簡單例子,來引出因子分析背後的思想。
1、 首先在一個k維的空間中按照多元高斯分佈生成m個(k維向量),即
4、 由於真實樣例與上述模型生成的有誤差,因此我們繼續加上誤差(n維向量),
讓我們使用一種直觀方法來解釋上述過程:
那麼按照因子分析的理解,樣本點的生成過程如下:
1、 我們首先認為在1維空間(這裡k=1),存在著按正態分佈生成的m個點,如下
均值為0,方差為1。
3、 之後加上,即將所有點的橫座標移動,縱座標移動,將直線移到一個位置,使得直線過點,原始左邊軸的原點現在為(紅色點)。
然而,樣本點不可能這麼規則,在模型上會有一定偏差,因此我們需要將上步生成的點做一些擾動(誤差),擾動。
5、 其中由於z和的均值都為0,因此也是原始樣本點(黑色點)的均值。
由以上的直觀分析,我們知道了因子分析其實就是認為高維樣本點實際上是由低維樣本點經過高斯分佈、線性變換、誤差擾動生成的,因此高維資料可以使用低維來表示。
5 因子分析模型
上面的過程是從隱含隨機變數z經過變換和誤差擾動來得到觀測到的樣本點。其中z被稱為因子,是低維的。
我們將式子再列一遍如下:
下面使用的因子分析表示方法是矩陣表示法,在參考資料中給出了一些其他的表示方法,如果不明白矩陣表示法,可以參考其他資料。
矩陣表示法認為z和x聯合符合多元高斯分佈,如下
我們已知E[z]=0,因此
然後得出聯合分佈的最終形式