這是我見過的講解EM算法最詳細的文章,沒有之一,本博末尾處有出處html
機器學習十大算法之一:EM算法。能評得上十大之一,讓人聽起來以爲挺NB的。什麼是NB啊,咱們通常說某我的很NB,是由於他能解決一些別人解決不了的問題。神爲何是神,由於神能作不少人作不了的事。那麼EM算法能解決什麼問題呢?或者說EM算法是由於什麼而來到這個世界上,還吸引了那麼多世人的目光。
我但願本身能通俗地把它理解或者說明白,可是,EM這個問題感受真的不太好用通俗的語言去說明白,由於它很簡單,又很複雜。簡單在於它的思想,簡單在於其僅包含了兩個步驟就能完成強大的功能,複雜在於它的數學推理涉及到比較繁雜的機率公式等。若是隻講簡單的,就丟失了EM算法的精髓,若是隻講數學推理,又過於枯燥和生澀,但另外一方面,想把二者結合起來也不是件容易的事。因此,我也無法期待我能把它講得怎樣。但願各位不吝指導。算法
扯了太多,得入正題了。假設咱們遇到的是下面這樣的問題:
假設咱們須要調查咱們學校的男生和女生的身高分佈。你怎麼作啊?你說那麼多人不可能一個一個去問吧,確定是抽樣了。假設你在校園裏隨便地活捉了100個男生和100個女生。他們共200我的(也就是200個身高的樣本數據,爲了方便表示,下面,我說「人」的意思就是對應的身高)都在教室裏面了。那下一步怎麼辦啊?你開始喊:「男的左邊,女的右邊,其餘的站中間!」。而後你就先統計抽樣獲得的100個男生的身高。假設他們的身高是服從高斯分佈的。可是這個分佈的均值u和方差∂2咱們不知道,這兩個參數就是咱們要估計的。記做θ=[u, ∂]T。
用數學的語言來講就是:在學校那麼多男生(身高)中,咱們獨立地按照機率密度p(x|θ)抽取100了個(身高),組成樣本集X,咱們想經過樣本集X來估計出未知參數θ。這裏機率密度p(x|θ)咱們知道了是高斯分佈N(u,∂)的形式,其中的未知參數是θ=[u, ∂]T。抽到的樣本集是X={x1,x2,…,xN},其中xi表示抽到的第i我的的身高,這裏N就是100,表示抽到的樣本個數。
因爲每一個樣本都是獨立地從p(x|θ)中抽取的,換句話說這100個男生中的任何一個,都是我隨便捉的,從個人角度來看這些男生之間是沒有關係的。那麼,我從學校那麼多男生中爲何就剛好抽到了這100我的呢?抽到這100我的的機率是多少呢?由於這些男生(的身高)是服從同一個高斯分佈p(x|θ)的。那麼我抽到男生A(的身高)的機率是p(xA|θ),抽到男生B的機率是p(xB|θ),那由於他們是獨立的,因此很明顯,我同時抽到男生A和男生B的機率是p(xA|θ)* p(xB|θ),同理,我同時抽到這100個男生的機率就是他們各自機率的乘積了。用數學家的口吻說就是從分佈是p(x|θ)的整體樣本中抽取到這100個樣本的機率,也就是樣本集X中各個樣本的聯合機率,用下式表示:
markdown
2、EM算法
好了,從新回到上面那個身高分佈估計的問題。如今,經過抽取獲得的那100個男生的身高和已知的其身高服從高斯分佈,咱們經過最大化其似然函數,就能夠獲得了對應高斯分佈的參數θ=[u, ∂]T了。那麼,對於咱們學校的女生的身高分佈也能夠用一樣的方法獲得了。
再回到例子自己,若是沒有「男的左邊,女的右邊,其餘的站中間!」這個步驟,或者說我抽到這200我的中,某些男生和某些女生一見傾心,已經好上了,糾纏起來了。我們也不想那麼殘忍,硬把他們拉扯開。那如今這200我的已經混到一塊兒了,這時候,你從這200我的(的身高)裏面隨便給我指一我的(的身高),我都沒法肯定這我的(的身高)是男生(的身高)仍是女生(的身高)。也就是說你不知道抽取的那200我的裏面的每個人究竟是從男生的那個身高分佈裏面抽取的,仍是女生的那個身高分佈抽取的。用數學的語言就是,抽取獲得的每一個樣本都不知道是從哪一個分佈抽取的。
這個時候,對於每個樣本或者你抽取到的人,就有兩個東西須要猜想或者估計的了,一是這我的是男的仍是女的?二是男生和女生對應的身高的高斯分佈的參數是多少?
只有當咱們知道了哪些人屬於同一個高斯分佈的時候,咱們纔可以對這個分佈的參數做出靠譜的預測,例如剛開始的最大似然所說的,但如今兩種高斯分佈的人混在一塊了,咱們又不知道哪些人屬於第一個高斯分佈,哪些屬於第二個,因此就無法估計這兩個分佈的參數。反過來,只有當咱們對這兩個分佈的參數做出了準確的估計的時候,才能知道到底哪些人屬於第一個分佈,那些人屬於第二個分佈。
這就成了一個先有雞仍是先有蛋的問題了。雞說,沒有我,誰把你生出來的啊。蛋不服,說,沒有我,你從哪蹦出來啊。(呵呵,這是一個哲學問題。固然了,後來科學家說先有蛋,由於雞蛋是鳥蛋進化的)。爲了解決這個你依賴我,我依賴你的循環依賴問題,總得有一方要先打破僵局,說,無論了,我先隨便整一個值出來,看你怎麼變,而後我再根據你的變化調整個人變化,而後如此迭代着不斷互相推導,最終就會收斂到一個解。這就是EM算法的基本思想了。
不知道你們可否理解其中的思想,我再來囉嗦一下。其實這個思想無處在不啊。
例如,小時候,老媽給一大袋糖果給你,叫你和你姐姐等分,而後你懶得去點糖果的個數,因此你也就不知道每一個人到底該分多少個。我們通常怎麼作呢?先把一袋糖果目測的分爲兩袋,而後把兩袋糖果拿在左右手,看哪一個重,若是右手重,那很明顯右手這代糖果多了,而後你再在右手這袋糖果中抓一把放到左手這袋,而後再感覺下哪一個重,而後再從重的那袋抓一小把放進輕的那一袋,繼續下去,直到你感受兩袋糖果差很少相等了爲止。呵呵,而後爲了體現公平,你還讓你姐姐先選了。
EM算法就是這樣,假設咱們想估計知道A和B兩個參數,在開始狀態下兩者都是未知的,但若是知道了A的信息就能夠獲得B的信息,反過來知道了B也就獲得了A。能夠考慮首先賦予A某種初值,以此獲得B的估計值,而後從B的當前值出發,從新估計A的取值,這個過程一直持續到收斂爲止。
EM的意思是「Expectation Maximization」,在咱們上面這個問題裏面,咱們是先隨便猜一下男生(身高)的正態分佈的參數:如均值和方差是多少。例如男生的均值是1米7,方差是0.1米(固然了,剛開始確定沒那麼準),而後計算出每一個人更可能屬於第一個仍是第二個正態分佈中的(例如,這我的的身高是1米8,那很明顯,他最大可能屬於男生的那個分佈),這個是屬於Expectation一步。有了每一個人的歸屬,或者說咱們已經大概地按上面的方法將這200我的分爲男生和女生兩部分,咱們就能夠根據以前說的最大似然那樣,經過這些被大概分爲男生的n我的來從新估計第一個分佈的參數,女生的那個分佈一樣方法從新估計。這個是Maximization。而後,當咱們更新了這兩個分佈的時候,每個屬於這兩個分佈的機率又變了,那麼咱們就再須要調整E步……如此往復,直到參數基本再也不發生變化爲止。
這裏把每一個人(樣本)的完整描述看作是三元組yi={xi,zi1,zi2},其中,xi是第i個樣本的觀測值,也就是對應的這我的的身高,是能夠觀測到的值。zi1和zi2表示男生和女生這兩個高斯分佈中哪一個被用來產生值xi,就是說這兩個值標記這我的究竟是男生仍是女生(的身高分佈產生的)。這兩個值咱們是不知道的,是隱含變量。確切的說,zij在xi由第j個高斯分佈產生時值爲1,不然爲0。例如一個樣本的觀測值爲1.8,而後他來自男生的那個高斯分佈,那麼咱們能夠將這個樣本表示爲{1.8, 1, 0}。若是zi1和zi2的值已知,也就是說每一個人我已經標記爲男生或者女生了,那麼咱們就能夠利用上面說的最大似然算法來估計他們各自高斯分佈的參數。可是它們未知,所以咱們只能用EM算法。
我們如今不是由於那個噁心的隱含變量(抽取獲得的每一個樣本都不知道是從哪一個分佈抽取的)使得原本簡單的能夠求解的問題變複雜了,求解不了嗎。那怎麼辦呢?人類解決問題的思路都是想可否把複雜的問題簡單化。好,那麼如今把這個複雜的問題逆回來,我假設已經知道這個隱含變量了,哎,那麼求解那個分佈的參數是否是很容易了,直接按上面說的最大似然估計就行了。那你就問我了,這個隱含變量是未知的,你怎麼就來一個假設說已知呢?你這種假設是沒有根據的。呵呵,我知道,因此咱們能夠先給這個給分佈弄一個初始值,而後求這個隱含變量的指望,當成是這個隱含變量的已知值,那麼如今就能夠用最大似然求解那個分佈的參數了吧,那假設這個參數比以前的那個隨機的參數要好,它更能表達真實的分佈,那麼咱們再經過這個參數肯定的分佈去求這個隱含變量的指望,而後再最大化,獲得另外一個更優的參數,……迭代,就能獲得一個皆大歡喜的結果了。併發
這裏本博主總結下,EM算法就是使用的條件是:
(1)知道具體的機率模型和數據集
(2)不知道模型具體參數(就像上面男女例子中不知道高斯機率模型的具體均值和方差)
(3)數據集不完整,部分屬性的值知道(就像上面的男女例子中,不知道是男是女)
其實看完後面的EM方法就能夠看出方法中的E和M就是對應的解決(3)和(2)的機器學習
這時候你就不服了,說你老迭代迭代的,你咋知道新的參數的估計就比原來的好啊?爲何這種方法行得通呢?有沒有失效的時候呢?何時失效呢?用到這個方法須要注意什麼問題呢?呵呵,一會兒拋出那麼多問題,搞得我適應不過來了,不過這證實了你有很好的搞研究的潛質啊。呵呵,其實這些問題就是數學家須要解決的問題。在數學上是能夠妥當的證實的或者得出結論的。那我們用數學來把上面的問題從新描述下。(在這裏能夠知道,無論多麼複雜或者簡單的物理世界的思想,都須要經過數學工具進行建模抽象才得以使用併發揮其強大的做用,並且,這裏面蘊含的數學每每能帶給你更多想象不到的東西,這就是數學的精妙所在啊)函數
假設咱們有一個樣本集{x(1),…,x(m)},包含m個獨立的樣本。但每一個樣本i對應的類別z(i)是未知的(至關於聚類),也即隱含變量。故咱們須要估計機率模型p(x,z)的參數θ,可是因爲裏面包含隱含變量z,因此很難用最大似然求解,但若是z知道了,那咱們就很容易求解了。
對於參數估計,咱們本質上仍是想得到一個使似然函數最大化的那個參數θ,如今與最大似然不一樣的只是似然函數式中多了一個未知的變量z,見下式(1)。也就是說咱們的目標是找到適合的θ和z讓L(θ)最大。那咱們也許會想,你就是多了一個未知的變量而已啊,我也能夠分別對未知的θ和z分別求偏導,再令其等於0,求解出來不也同樣嗎?
工具
這個不斷的迭代,就能夠獲得使似然函數L(θ)最大化的參數θ了。那就得回答剛纔的第二個問題了,它會收斂嗎?
感性的說,由於下界不斷提升,因此極大似然估計單調增長,那麼最終咱們會到達最大似然估計的最大值。理性分析的話,就會獲得下面的東西:
學習
具體如何證實的,看推導過程參考:Andrew Ng《The EM algorithm》
http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html優化
座標上升法(Coordinate ascent):
圖中的直線式迭代優化的路徑,能夠看到每一步都會向最優值前進一步,並且前進路線是平行於座標軸的,由於每一步只優化一個變量。
這猶如在x-y座標系中找一個曲線的極值,然而曲線函數不能直接求導,所以什麼梯度降低方法就不適用了。但固定一個變量後,另一個能夠經過求導獲得,所以可使用座標上升法,一次固定一個變量,對另外的求極值,最後逐步逼近極值。對應到EM上,E步:固定θ,優化Q;M步:固定Q,優化θ;交替將極值推向最大。atom
EM算法有不少的應用,最普遍的就是
具體能夠參考JerryLead的cnblog中的Machine Learning專欄:
沒有雞和蛋的前後之爭,由於他們都知道「沒有你就沒有我」。今後他們一塊兒過上了幸福美好的生活。
參考: