參考文章:http://blog.csdn.net/sallyyoung_sh/article/details/54630044
1、故事背景
在之前介紹極大似然估計(jì)的時(shí)候,我們從一個(gè)估計(jì)學(xué)校男生身高分布的例子出發(fā),但是如果此時(shí)我們不僅僅要估計(jì)男生身高分布,還要估計(jì)女生身高分布呢?假設(shè)我們又抽樣了100個(gè)女生的身高,因此我們現(xiàn)在一共有200個(gè)數(shù)據(jù)點(diǎn),不過(guò)不巧的是,我們性別那一列不見(jiàn)了,這200個(gè)數(shù)據(jù)點(diǎn)被混在一起了,無(wú)法識(shí)別哪些是男生,哪些是女生,這時(shí)候如何估計(jì)男生女生的身高分布呢?極大似然方法已經(jīng)不起作用了,因?yàn)槟猩团纳砀邅?lái)自不同的高斯分布。這時(shí)候,我們就要用到一種更厲害的算法--EM算法。
2、EM算法基本思想
啰嗦了半天,上面的問(wèn)題總結(jié)一下就是:抽取得到的每個(gè)樣本都不知道是從哪個(gè)分布抽取的。 這個(gè)時(shí)候,對(duì)于每一個(gè)樣本或者你抽取到的人,就有兩個(gè)東西需要猜測(cè)或者估計(jì)的了,一是這個(gè)人是男的還是女的?二是男生和女生對(duì)應(yīng)的身高的高斯分布的參數(shù)是多少?
只有當(dāng)我們知道了哪些人屬于同一個(gè)高斯分布的時(shí)候,我們才能夠?qū)@個(gè)分布的參數(shù)作出靠譜的預(yù)測(cè),例如剛開(kāi)始的最大似然所說(shuō)的,但現(xiàn)在兩種高斯分布的人混在一塊了,我們又不知道哪些人屬于第一個(gè)高斯分布,哪些屬于第二個(gè),所以就沒(méi)法估計(jì)這兩個(gè)分布的參數(shù)。反過(guò)來(lái),只有當(dāng)我們對(duì)這兩個(gè)分布的參數(shù)作出了準(zhǔn)確的估計(jì)的時(shí)候,才能知道到底哪些人屬于第一個(gè)分布,那些人屬于第二個(gè)分布。
這就成了一個(gè)先有雞還是先有蛋的問(wèn)題了。雞說(shuō),沒(méi)有我,誰(shuí)把你生出來(lái)的啊。蛋不服,說(shuō),沒(méi)有我,你從哪蹦出來(lái)啊。為了解決這個(gè)你依賴(lài)我,我依賴(lài)你的循環(huán)依賴(lài)問(wèn)題,總得有一方要先打破僵局,說(shuō),不管了,我先隨便整一個(gè)值出來(lái),看你怎么變,然后我再根據(jù)你的變化調(diào)整我的變化,然后如此迭代著不斷互相推導(dǎo),最終就會(huì)收斂到一個(gè)解。這就是EM算法的基本思想了。
EM算法就是這樣,假設(shè)我們想估計(jì)知道A和B兩個(gè)參數(shù),在開(kāi)始狀態(tài)下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反過(guò)來(lái)知道了B也就得到了A。可以考慮首先賦予A某種初值,以此得到B的估計(jì)值,然后從B的當(dāng)前值出發(fā),重新估計(jì)A的取值,這個(gè)過(guò)程一直持續(xù)到收斂為止。
EM的意思是“Expectation Maximization”,在我們上面這個(gè)問(wèn)題里面,我們是先隨便猜一下男生(身高)的正態(tài)分布的參數(shù):如均值和方差是多少。例如男生的均值是1米7,方差是0.1米(當(dāng)然了,剛開(kāi)始肯定沒(méi)那么準(zhǔn)),然后計(jì)算出每個(gè)人更可能屬于第一個(gè)還是第二個(gè)正態(tài)分布中的(例如,這個(gè)人的身高是1米8,那很明顯,他最大可能屬于男生的那個(gè)分布),這個(gè)是屬于Expectation一步。有了每個(gè)人的歸屬,或者說(shuō)我們已經(jīng)大概地按上面的方法將這200個(gè)人分為男生和女生兩部分,我們就可以根據(jù)之前說(shuō)的最大似然那樣,通過(guò)這些被大概分為男生的n個(gè)人來(lái)重新估計(jì)第一個(gè)分布的參數(shù),女生的那個(gè)分布同樣方法重新估計(jì)。這個(gè)是Maximization。然后,當(dāng)我們更新了這兩個(gè)分布的時(shí)候,每一個(gè)屬于這兩個(gè)分布的概率又變了,那么我們就再需要調(diào)整E步……如此往復(fù),直到參數(shù)基本不再發(fā)生變化為止。
這里把每個(gè)人(樣本)的完整描述看做是三元組yi={xi,zi1,zi2},其中,xi是第i個(gè)樣本的觀測(cè)值,也就是對(duì)應(yīng)的這個(gè)人的身高,是可以觀測(cè)到的值。zi1和zi2表示男生和女生這兩個(gè)高斯分布中哪個(gè)被用來(lái)產(chǎn)生值xi,就是說(shuō)這兩個(gè)值標(biāo)記這個(gè)人到底是男生還是女生(的身高分布產(chǎn)生的)。這兩個(gè)值我們是不知道的,是隱含變量。確切的說(shuō),zij在xi由第j個(gè)高斯分布產(chǎn)生時(shí)值為1,否則為0。例如一個(gè)樣本的觀測(cè)值為1.8,然后他來(lái)自男生的那個(gè)高斯分布,那么我們可以將這個(gè)樣本表示為{1.8, 1, 0}。如果zi1和zi2的值已知,也就是說(shuō)每個(gè)人我已經(jīng)標(biāo)記為男生或者女生了,那么我們就可以利用上面說(shuō)的最大似然算法來(lái)估計(jì)他們各自高斯分布的參數(shù)。但是它們未知,因此我們只能用EM算法。
咱們現(xiàn)在不是因?yàn)槟莻€(gè)惡心的隱含變量(抽取得到的每個(gè)樣本都不知道是從哪個(gè)分布抽取的)使得本來(lái)簡(jiǎn)單的可以求解的問(wèn)題變復(fù)雜了,求解不了嗎。那怎么辦呢?人類(lèi)解決問(wèn)題的思路都是想能否把復(fù)雜的問(wèn)題簡(jiǎn)單化。好,那么現(xiàn)在把這個(gè)復(fù)雜的問(wèn)題逆回來(lái),我假設(shè)已經(jīng)知道這個(gè)隱含變量了,哎,那么求解那個(gè)分布的參數(shù)是不是很容易了,直接按上面說(shuō)的最大似然估計(jì)就好了。那你就問(wèn)我了,這個(gè)隱含變量是未知的,你怎么就來(lái)一個(gè)假設(shè)說(shuō)已知呢?你這種假設(shè)是沒(méi)有根據(jù)的。呵呵,我知道,所以我們可以先給這個(gè)給分布弄一個(gè)初始值,然后求這個(gè)隱含變量的期望,當(dāng)成是這個(gè)隱含變量的已知值,那么現(xiàn)在就可以用最大似然求解那個(gè)分布的參數(shù)了吧,那假設(shè)這個(gè)參數(shù)比之前的那個(gè)隨機(jī)的參數(shù)要好,它更能表達(dá)真實(shí)的分布,那么我們?cè)偻ㄟ^(guò)這個(gè)參數(shù)確定的分布去求這個(gè)隱含變量的期望,然后再最大化,得到另一個(gè)更優(yōu)的參數(shù),……迭代,就能得到一個(gè)皆大歡喜的結(jié)果了。
這時(shí)候你就不服了,說(shuō)你老迭代迭代的,你咋知道新的參數(shù)的估計(jì)就比原來(lái)的好啊?為什么這種方法行得通呢?有沒(méi)有失效的時(shí)候呢?什么時(shí)候失效呢?用到這個(gè)方法需要注意什么問(wèn)題呢?呵呵,一下子拋出那么多問(wèn)題,搞得我適應(yīng)不過(guò)來(lái)了,不過(guò)這證明了你有很好的搞研究的潛質(zhì)啊。呵呵,其實(shí)這些問(wèn)題就是數(shù)學(xué)家需要解決的問(wèn)題。在數(shù)學(xué)上是可以穩(wěn)當(dāng)?shù)淖C明的或者得出結(jié)論的。那咱們用數(shù)學(xué)來(lái)把上面的問(wèn)題重新描述下。(在這里可以知道,不管多么復(fù)雜或者簡(jiǎn)單的物理世界的思想,都需要通過(guò)數(shù)學(xué)工具進(jìn)行建模抽象才得以使用并發(fā)揮其強(qiáng)大的作用,而且,這里面蘊(yùn)含的數(shù)學(xué)往往能帶給你更多想象不到的東西,這就是數(shù)學(xué)的精妙所在啊)