前言:想學習一些統計學的知識,所以想把自己學習的過程記錄下來,希望自己能夠堅持下來。也非常希望能夠在CSDN找到小夥伴一起學習,監督,共同成長。
EM算法和高斯混合模型學習
一、EM算法的引入
EM(expectation maximization)算法在李航的書《統計學習方法》中的定義如下:EM是一種迭代算法,用於含有隱變量的概率模型參數的極大似然估計,或者極大後驗概率的估計。(對於這個概率模型的極大似然估計以及極大後驗概率這兩個概念,表示忘記了,所以需要重新拾起一遍)
EM算法的每次迭代包括兩步:
- E步:求期望。利用當前估計的參數值來計算對數似然的期望值。
- M步:求極大(後驗概率或者極大似然估計)尋找能使E步產生的似然期望最大的參數值,然後不斷迭代。
二、相關概念的解釋
1、概率模型
因爲EM算法是用來求解概率模型的參數問題的,那麼對於概率模型是什麼必然要有了解。對於概率模型,在維基百科上的解釋如下:
概率模型(Statistical Model,也稱爲Probabilistic Model)是用來描述不同隨機變量之間關係的數學模型,通常情況下刻畫了一個或多個隨機變量之間的相互非確定性的概率關係。從數學上講,該模型通常被表達爲 { (Y,P)} (Y,P),其中 {Y} Y是觀測集合用來描述可能的觀測結果, {P} P是 { Y} Y對應的概率分佈函數集合。若使用概率模型,一般而言需假設存在一個確定的分佈 { P} P生成觀測數據 { Y} Y。因此通常使用統計推斷的辦法確定集合 { P} P中誰是數據產生的原因。
對於這個解釋我個人的理解就是需要求解出P,但是P是一個函數,所以會涉及到很多參數的求解,所以這個過程中就會出現問題:採用什麼樣的方法來求解這個問題,或者說這些函數都符合哪一類函數?線性?高斯?求解這個的過程也是需要參考已有的數據集的。這些數據集又會出現各種情況:完不完整?可不可靠?其實對於整個概率模型的解釋,可能百度百科上的解釋更爲通俗一些,大家可以參考一下。
2、極大似然估計
對於極大似然估計,我需要理一理。首先是一些基本的概念問題。
- 概率密度函數:是一個描述這個隨機變量的輸出值,在某個確定的取值點附近的可能性的函數,而隨機變量的取值落在某個區域之內的概率則爲概率密度函數在這個區域上的積分。(也就是說一個隨機變量在某個點附近可能滿足的函數,就是概率密度函數)
- 最大似然估計的原理:對於一個概率分佈函數,我們並不知道他的分佈參數,但是我們可以通過採樣求出他對應的參數。每一個採樣對應不同的值,最大似然估計會尋找關於參數 {theta }的最可能的值(即,在所有可能的 {theta } 取值中,尋找一個值使這個採樣的“可能性”最大化)。我們首先要定義似然函數:
並且在 {theta } 的所有取值上通過令一階導數等於零,使這個函數取到最大值。這個使可能性最大的 theta值即稱爲 {theta } 的最大似然估計。
三、問題的引入
之前也說過,EM算法是用來求解概率模型當中的隱變量問題的。那麼什麼是隱變量問題呢?
在以前的機器學習算法中,我們一直假設樣本所有屬性變量的值都已被觀測到,也就是說訓練樣本是“完整的”,但是在顯示生活中往往會遇到“不完整”的。比如周志華書中的一個例子:例如由於西瓜的根蒂已脫落,無法看出是“蜷縮”還是“硬挺”,則訓練樣本的“根蒂”屬性變量值未知。在這種存在“未觀測”變量的情形下,是否仍能對模型參數進行評估呢?自然是可以的,未觀測變量我們稱之爲“隱變量”(latent variable)。
在李航的《統計學習方法》中有這樣的解釋:
三硬幣的例子
有ABC三枚硬幣,單次投擲出現正面的概率分別爲π、p、q。利用這三枚硬幣進行如下實驗:
- 第一次先投擲A,若出現正面則投擲B,否則投擲C
- 記錄第二次投擲的硬幣出現的結果,正面記作1,反面記作0
獨立重複1和2十次,產生如下觀測結果:
1 1 0 1 0 0 1 0 1 1
假設只能觀測到擲硬幣的最終結果,無法觀測第一次投擲的是哪一枚硬幣,求π、p、q,即三硬幣模型的參數。
記模型參數爲θ=(π,p,q),無法觀測的第一次投擲的硬幣爲隨機變量z,可以觀測的第二次投擲的硬幣爲隨機變量y,則觀測數據的似然函數爲:
這是個一目瞭然的式子,兩個事件,第一個事件選出那枚看不到的硬幣,第二個事件利用這枚硬幣進行一次投擲。利用硬幣結果只可能是0或1這個特性,可以將這個式子展開爲:
y的觀測序列給定了,怎麼找出一個模型參數,使得這個序列的概率(似然函數的值)最大呢,也就是求模型參數的極大似然估計:
這個問題我認爲是個NP(無法解決的)問題,一方面,給定模型參數,可以在多項式時間求出似然函數的值,然而模型參數的組合是無窮的,誰也不知道它是否是最優的。
EM對於這個問題的簡單解釋
EM算法是求解這個問題的一種迭代算法(我認爲並非精確算法,而是近似算法),它有3步:
- 初始化:選取模型參數的初值:,循環如下兩步迭代
- E步:計算在當前迭代的模型參數下,觀測數據y來自硬幣B的概率:
這個式子也是一目瞭然的,分子代表選定B並進行一次投擲試驗,分母代表選定B或C並進行一次投擲試驗,兩個一除就得到試驗結果來自B的概率。
- M步:估算下一個迭代的新的模型估算值:
這個也好說,把這n個{試驗結果來自B的概率}求和得到期望,平均後,得到B出正面的似然估計,同理有p和q。
重複迭代,直到收斂爲止。
這個模型中,觀測數據Y和隱數據Z組合在一起稱爲完全數據,單獨的觀測數據Y稱爲不完全數據。在隱數據未知的情況,無法直接估計Y的概率分佈。但當模型概率給定時,就可以估計Y的條件概率分佈了。
Y的條件概率分佈估計出來後有什麼用呢?利用Y的條件概率分佈,又可以更新模型參數……那問題來了,爲什麼要這麼做,這麼做能否找到最優解,原理是什麼?
帶着這些問題啃書本稍微有趣一些,在探索這個問題之前,有必要規範地描述EM算法,並引入一些正規的符號和定義:
EM算法的標準定義
輸入:觀測變量數據Y,隱變量數據Z,聯合分佈,條件分佈;
輸出:模型參數θ。
- (1) 選擇參數的初值,開始迭代;
- (2) E步:記爲第i次迭代參數θ的估計值,在第i+1次迭代的E步,計算
這裏,是在給定觀測數據Y和當前的參數估計下隱變量數據z的條件概率分佈; - (3) M步:求使的θ,確定第i+1次迭代的參數的估計值
- (4)重複第(2)步和第(3)步,直到收斂。
式的函數是EM算法的核心,稱爲Q函數(Q function)。
定義(Q函數)完全數據的對數似然函數關於在給定觀測數據Y和當前參數下對未觀測數據Z的條件概率分佈的期望稱爲Q函數,即
下面關於EM算法作幾點說明:
- 步驟(1)參數的初值可以任意選擇,但需注意EM算法對初值是敏感的。
- 步驟(2)E步求Q函數。Q函數式中Z是未觀測數據,Y是觀測數據。注意,Q函數的第1個變元表示要極大化的參數,第2個變元表示參數的當前估計值。每次迭代實際在求Q函數及其極大。
- 步驟(3)M步求Q函數的極大化,得到
完成一次迭代,後面將證明每次迭代使似然函數增大或達到局部極值。
- 步驟(4)給出停止迭代的條件,一般是對較小的正數,若滿足
則停止迭代。
以上都是李航的《統計學習方法》中的內容,之後就是EM算法的導出了。這裏也就省略了,主要是符號太難截圖了。可以參考書籍或者這篇博客
EM算法的一些數學推導
EM算法的數學推導中會用到一個Jensen不等式,那麼這個不等式的定義如下:
過一個凸函數上任意兩點所作割線一定在這兩點間的函數圖象的上方,即:見維基百科
書中採用的是:
同時我一直對於爲什麼對於含有隱變量的概率模型不能採用簡單的貝葉斯或者極大似然估計的方法求出參數這個問題感到疑惑,查了查,知乎上慧航的有這麼一段解釋我覺得能大概幫助我理解一些:
也就是在已有觀測結果的基礎上,加上假設的參數,求出隱變量的概率分佈,然後基於這個概率分佈得出參數的期望(E),然後最大化這個期望(M)(不斷找到一個參數使得期望最大)。我覺得解釋的比較好的還有一個博客
EM算法的一些理解
EM算法可以說是求極大似然估計的一種方法,雖然李航博士的書中說對於隱變量(三硬幣)的問題沒有解析解,但是其實還是可以用似然估計進行求解的(具體求解方式還未查),但是直接方法求的話比較難,複雜度也高,因此採用EM算法。EM算法就是求解這樣的問題:未知兩個參數A,B,這兩個參數之間還有一定的聯繫,那麼就可以先假設其中一個參數A的初始值,然後計算另一個參數B的值,再通過另一個參數B來調優A的值。另外一篇寫得很不錯的,通俗易懂的,由@zouxy09寫的博客博客。