今天不太想學習,炒個冷飯,講講機器學習十大演算法裡有名的em演算法,文章裡面有些個人理解,如有錯漏,還請讀者不吝賜教。
然而現在我面臨的是這種情況,我手上的資料是四川人和東北人的身高合集,然而對於其中具體的每乙個資料,並沒有標定出它來自「東北人」還是「四川人」,我想如果把這個資料集的概率密度畫出來,大約是這個樣子:
好了不要吐槽了,能畫成這個樣子我已經很用心了= =
其實這個雙峰的概率密度函式是有模型的,稱作高斯混合模型(gmm),寫作:
話說往部落格上加公式真是費勁= =這模型很好理解,就是k個高斯模型加權組成,α是各高斯分布的權重,θ是引數。對gmm模型的引數估計,就要用em演算法。更一般的講,em演算法適用於帶有隱變數的概率模型的估計,什麼是隱變數呢?就是觀測不到的變數,對於上面四川人和東北人的例子,對每乙個身高而言,它來自四川還是東北,就是乙個隱變數。
為什麼要用em,我們來具體考慮一下上面這個問題。如果使用極大似然估計——這是我們最開始最單純的想法,那麼我們需要極大化的似然函式應該是這個:
然而我們並不知道p(x;θ)的表示式,有同學說我知道啊,不就是上面那個混個高斯模型?不就是引數多一點麼。
仔細想想,gmm裡的θ可是由四川人和東北人兩部分組成喲,假如你要估計四川人的身高均值,直接用gmm做似然函式,會把四川人和東北人全考慮進去,顯然不合適。
另乙個想法是考慮隱變數,如果我們已經知道哪些樣本來自四川,哪些樣本來自東北,那就好了。用z=0或z=1標記樣本來自哪個總體,則z就是隱變數,需要最大化的似然函式就變為:
然而並沒有卵用,因為隱變數確實不知道。要估計乙個樣本是來自四川還是東北,我們就要有模型引數,要估計模型引數,我們首先要知道乙個樣本是來自四川或東北的可能性...
到底是雞生蛋,還是蛋生雞?
不鬧了,我們的方法是假設。首先假設乙個模型引數θ,然後每個樣本來自四川/東北的概率p(zi)就能算出來了,p(xi,zi)=p(xi|zi)p(zi),而x|z=0服從四川人分布,x|z=1服從東北人分布,所以似然函式可以寫成含有θ的函式,極大化它我們可以得到乙個新的θ。新的θ因為考慮了樣本來自哪個分布,會比原來的更能反應資料規律。有了這個更好的θ我們再對每個樣本重新計算它來自四川和東北的概率,用更好的θ算出來的概率會更準確,有了更準確的資訊,我們可以繼續像上面一樣估計θ,自然而然這次得到的θ會比上一次更棒,如此蒸蒸日上,直到收斂(引數變動不明顯了),理論上,em演算法就說完了。
然而事情並沒有這麼簡單,上面的思想理論上可行,實踐起來不成。主要是因為似然函式有「和的log」這一項,log裡面是乙個和的形式,一求導這畫面不要太美,直接強來你要面對 「兩個正態分佈的概率密度函式相加」做分母,「兩個正態分佈分別求導再相加」做分子的分數形式。m個這玩意加起來令它等於0,要求出關於θ的解析解,你對自己的數學水平想的不要太高。
怎麼辦?先介紹乙個不等式,叫jensen不等式,是這樣說的:
x是乙個隨機變數,f(x)是乙個凸函式(二階導數大或等於0),那麼有:
當且僅當x是常數的時候等號成立
如果f(x)是凹函式,不等號反向
關於這個不等式,我既不打算證明,也不打算說明,希望你承認它正確就好。
半路殺出乙個jensen不等式,要用它解決上面的困境也是應有之義,不然說它做什麼。直接最大化似然函式做不到,那麼如果我們能找到似然函式的乙個緊的下界一直優化它,並保證每次迭代能夠使總的似然函式一直增大,其實也是一樣的。怎麼說?畫個圖你就明白了:
圖畫的不好,多見諒。橫座標是引數,縱座標是似然函式,首先我們初始化乙個θ1,根據它求似然函式乙個緊的下界,也就是圖中第一條黑**,黑**上的值雖然都小於似然函式的值,但至少有一點可以滿足等號(所以稱為緊下界),最大化小黑**我們就hit到至少與似然函式剛好相等的位置,對應的橫座標就是我們的新的θ2,如此進行,只要保證隨著θ的更新,每次最大化的小黑**值都比上次的更大,那麼演算法收斂,最後就能最大化到似然函式的極大值處。
構造這個小黑**,就要靠jensen不等式。注意我們這裡的log函式是個凹函式,所以我們使用的jensen不等式的凹函式版本。根據jensen函式,需要把log裡面的東西寫成乙個數學期望的形式,注意到log裡的和是關於隱變數z的和,於是自然而然,這個數學期望一定是和z有關,如果設q(z)是z的分布函式,那麼可以這樣構造:
這幾句公式比較多,我不一一敲了,直接把我ppt裡的內容截圖過來:
所以log裡其實構造了乙個隨機變數y,y是z的函式,y取p/q的值的概率是q,這點說的很清楚了。
有了這一步,我們看一下整個式子:
也就是說我們找到了似然函式的乙個下界,那麼優化它是否就可以呢?不是的,上面說了必須保證這個下界是緊的,也就是至少有點能使等號成立。由jensen不等式,等式成立的條件是隨機變數是常數,具體到這裡,就是:
又因為q(z)是z的分布函式,所以:
把c乘過去,可得c就是p(xi,z)對z求和,所以我們終於知道了:
得到q(z),大功告成,q(z)就是p(zi|xi),或者寫成p(zi),都是一回事,代表第i個資料是來自zi的概率。
於是em演算法出爐,它是這樣做的:
首先,初始化引數θ
(1)e-step:根據引數θ計算每個樣本屬於zi的概率,即這個身高來自四川或東北的概率,這個概率就是q
(2)m-step:根據計算得到的q,求出含有θ的似然函式的下界並最大化它,得到新的引數θ
重複(1)和(2)直到收斂,可以看到,從思想上來說,和最開始沒什麼兩樣,只不過直接最大化似然函式不好做,曲線救國而已。
至於為什麼這樣的迭代會保證似然函式單調不減,即em演算法的收斂性證明,我就先不寫了,以後有時間再考慮補。需要額外說明的是,em演算法在一般情況是收斂的,但是不保證收斂到全域性最優,即有可能進入區域性的最優。em演算法在混合高斯模型,隱馬爾科夫模型中都有應用,是著名的資料探勘十大演算法之一。
機器學習 EM演算法推導
有時,我們用極大似然的時候,公式中可能會有隱變數 l i 1m p yi i 1 m z p yi z i 1m zp z p y i z 也就是 y 取什麼值是由隱含的變數 z 決定的。舉個栗子 有三個硬幣,abc,先拋a,由a的正反面決定下一步拋 b 還是拋 c a是正面拋b,a是反面拋c。第二...
EM演算法詳細推導
em演算法推導 em演算法舉例 em演算法收斂性證明 一點小思考 參考文獻 概率模型有時既含有觀測變數,又含有隱變數或潛在變數。如果概率模型的變數都是觀測變數,那麼給定觀測資料,直接根據極大似然估計求解模型引數。em演算法是一種迭代演算法,用於含有隱變數的概率模型引數的極大似然估計或者極大後驗概率估...
EM演算法詳細講解
本文試圖用最簡單的例子 最淺顯的方式說明em expectation maximization 演算法的應用場景和使用方法,而略去公式的推導和收斂性的證明。以下內容翻譯自 data intensive text processing with mapreduce maximum likelihood...