EM算法及實現(xiàn)

周志華老師在《機器學(xué)習(xí)》里這樣評價 EM算法:EM算法是最常見的隱變量估計方法咖气,在機器學(xué)習(xí)里有著極為廣泛的用途牙甫,例如常被用來學(xué)習(xí)高斯混合模型(Gaussian mixture model伏伐,簡稱GMM)的參數(shù)隘竭。K均值算法就是一個典型的 EM算法渊抽。

EM算法是怎樣的隱變量估計方法达传?

《機器學(xué)習(xí)》這樣描述隱變量估計方法(見7.6):我們一直假設(shè)訓(xùn)練樣本所有屬性變量的值都已被觀測到,即訓(xùn)練樣本是完整的劳吠。但在現(xiàn)實應(yīng)用中往往會遇到“不完整”的訓(xùn)練樣本引润,例如由于西瓜的根蒂已脫落,無法看出是“卷縮”還是“硬挺”痒玩,則訓(xùn)練樣本的“根蒂”屬性變量值未知淳附。未觀測變量的學(xué)名是“隱變量”(latent variable)。EM(Expectation-Maximization)算法 [ Dempstert et al.,1977] 是常用的估計參數(shù)隱變量的利器凰荚,它是一種迭代式的方法燃观。EM算法使用兩個步驟交替計算:第一步是期望(E)步褒脯,利用當(dāng)前估計的參數(shù)值來計算對數(shù)似然的期望值;第二步是最大化(M)步便瑟,尋找能使 E步產(chǎn)生的似然期望最大化的參數(shù)值。然后番川,新的到的參數(shù)值重新被用于 E步到涂,直至收斂到局部最優(yōu)解。

2008年自然雜志發(fā)表過這樣一篇文章 What is the expectation maximization algorithm?(什么是EM算法颁督,什么是EM算法? )践啄,用投硬幣的例子介紹了 EM算法,硬幣是常見的物品沉御,用來理解 EM算法可能會更容易一些屿讽。

這篇科普文基本沒有什么“像樣”的公式,對于受過專業(yè)訓(xùn)練的人而言,公式或許更有利于他們理解算法的基本原理伐谈,但對普通讀者而言烂完,太多的公式,只會嚇走他們诵棵。

如下圖所示抠蚣,有兩個硬幣 A和 B,其中一個的密度不是很均勻履澳,出現(xiàn)正面的概率會大一些嘶窄,我們想知道這個硬幣是哪一個。然后我們做了下面這個試驗距贷,隨機取出一枚硬幣柄冲,記下是 A硬幣還是 B硬幣,并連續(xù)拋10次忠蝗,記錄下每次拋出的結(jié)果(正面或背面)羊初,這樣的試驗總共做了5次,結(jié)果如下圖什湘。

摘自 什么是EM算法

很明顯长赞,如果我們記錄好每次拋的是哪一個硬幣,以及出現(xiàn)正面或背面的結(jié)果闽撤,我們就能夠用某種方法(例如極大似然估計法)估計出每個硬幣出現(xiàn)正面的概率得哆,這個例子中 A硬幣出現(xiàn)正面的概率估計值是0.8,B硬幣出現(xiàn)正面的概率估計值是0.45哟旗。通過試驗和計算贩据,我們可以判斷出哪一個硬幣更容易出現(xiàn)正面,以及相應(yīng)的概率估計值闸餐。

然而饱亮,生活并不是那么如意的。如果做試驗的伙計忘記了記錄每次拋的是哪一個硬幣舍沙,那么他就無法從記錄中區(qū)分哪一些是來自 A硬幣的近上,哪一些是來自 B硬幣的,也就是說拂铡,我們沒辦法估計 A硬幣或 B硬幣出現(xiàn)正面的概率壹无。

難道只能重新做試驗嗎?辦法是有的感帅,例如 EM算法斗锭。

如下圖所示,由于沒有記錄每次試驗選的是哪枚硬幣失球,這個未觀測變量就是隱變量岖是,我們只得到一堆 H(正面)或 T(背面)的記錄,但是我們?nèi)匀豢梢酝ㄟ^某種方法估計出 A硬幣和 B硬幣在每次試驗中出現(xiàn)的概率值。例如投硬幣試驗可以看作多重伯努利試驗豺撑,如果我們先給出 A硬幣和 B硬幣出現(xiàn)正面概率的硬估值(更準確的說是初始值)作箍,再結(jié)合每次試驗出現(xiàn) H或 T的次數(shù),通過二項分布公式前硫,我們就可以得出 A硬幣和 B硬幣在每次試驗中出現(xiàn)的概率估計值(E-Step)胞得。通過這種辦法,我們把之前因為隱變量無法分清的試驗結(jié)果給“分清”了屹电,這樣我們就又回到了上圖中極大似然估計的路線上阶剑,而極大似然估計方法又幫助我們更新了 A硬幣和 B硬幣出現(xiàn)正面的概率估計值(M-Step),這對值較之前的硬估值有了很大改變危号,但我們?nèi)圆粷M意這樣的結(jié)果牧愁,把這對值再次投入到 E-Step 和 M-Step 中。經(jīng)過多次迭代后外莲,在滿足一定條件下猪半,輸出 A硬幣出現(xiàn)正面的概率估計值是0.80,B硬幣出現(xiàn)正面的概率估計值是0.52偷线,這和上圖有完整數(shù)據(jù)情況下用極大似然估計方法得到的結(jié)果磨确,已經(jīng)非常接近了。

摘自 什么是 EM算法

關(guān)于 EM算法的實現(xiàn)声邦,參考的是杜克大學(xué)的計算統(tǒng)計學(xué)網(wǎng)站 EM算法實現(xiàn)乏奥。該網(wǎng)站提供了五種輸出一致的Python腳本,我們從中選擇一種比較簡潔的腳本亥曹,如下圖所示邓了。

? 摘自 EM算法實現(xiàn)

我們把這段 Python腳本改寫成 R腳本,看看可不可以更加簡潔一些媳瞪。

根據(jù) Python腳本改的 R腳本骗炉,運行結(jié)果一致

Fong Chun Chan's Blog 提供了用 EM算法求高斯混合分布參數(shù)的 R腳本。其中蛇受,他用 k 均值聚類方法得到的聚類結(jié)果作為作為初始估計值(用他的話是 hard-labels)句葵,然后通過 EM算法得到最終的聚類結(jié)果(soft-labels),這種思路是極好的龙巨。我自己做得不夠好的地方就是笼呆,我常常做完粗糙的 hard-labels后,就收工了旨别,而沒有去思考怎么去做更精細的 soft-labels。

簡言之汗茄,如果有不完整數(shù)據(jù)出現(xiàn)(例如數(shù)據(jù)缺失)秸弛,都可以用到 EM算法,或者是用上 EM算法的思路。思路可能更重要递览,因為在生產(chǎn)環(huán)境中叼屠,對算法性能的要求更高,我們可能更多用到的是一些“高大上”的工具绞铃,而不是自己去造工具镜雨。但當(dāng)我們把各種工具連接起來的時候,對這些工具的理解就顯得尤為重要了儿捧。

更重要的是荚坞,如果一個企業(yè)開發(fā)和算法有關(guān)的產(chǎn)品或服務(wù),項目組內(nèi)的成員對算法的理解南轅北轍菲盾,這樣的產(chǎn)品或服務(wù)即使開發(fā)出來颓影,也很難被客戶接受。所以懒鉴,在數(shù)據(jù)時代诡挂,對全員的算法方面的認知培訓(xùn)是必要的,算法工程師也應(yīng)該盡可能的將抽象的算法轉(zhuǎn)換為能為更多人所接受的知識临谱。

寫本文的初衷璃俗,是希望有一種和同事們進行溝通的媒介,或者作為一種和程序員交流的游戲悉默,基于 Python 和 R 的 EM算法已經(jīng)有了旧找,Java 或 PHP 程序員接個龍好不好啊麦牺?


參考:

[1] 周志華 《機器學(xué)習(xí)》

[2] http://ai.stanford.edu/%7Echuongdo/papers/em_tutorial.pdf? 什么是 EM算法

[3] http://people.duke.edu/%7Eccc14/sta-663/EMAlgorithm.html EM算法實現(xiàn)

[4] http://tinyheero.github.io/2016/01/03/gmm-em.html 用EM算法求GMM參數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钮蛛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剖膳,更是在濱河造成了極大的恐慌魏颓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吱晒,死亡現(xiàn)場離奇詭異甸饱,居然都是意外死亡,警方通過查閱死者的電腦和手機仑濒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門叹话,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人墩瞳,你說我怎么就攤上這事驼壶。” “怎么了喉酌?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵热凹,是天一觀的道長泵喘。 經(jīng)常有香客問我,道長般妙,這世上最難降的妖魔是什么纪铺? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮碟渺,結(jié)果婚禮上鲜锚,老公的妹妹穿的比我還像新娘。我一直安慰自己苫拍,他們只是感情好芜繁,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怯疤,像睡著了一般浆洗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上集峦,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天伏社,我揣著相機與錄音,去河邊找鬼塔淤。 笑死摘昌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的高蜂。 我是一名探鬼主播聪黎,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼备恤!你這毒婦竟也來了稿饰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤露泊,失蹤者是張志新(化名)和其女友劉穎喉镰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惭笑,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡侣姆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沉噩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捺宗。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖川蒙,靈堂內(nèi)的尸體忽然破棺而出蚜厉,到底是詐尸還是另有隱情,我是刑警寧澤派歌,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布弯囊,位于F島的核電站痰哨,受9級特大地震影響胶果,放射性物質(zhì)發(fā)生泄漏匾嘱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一早抠、第九天 我趴在偏房一處隱蔽的房頂上張望霎烙。 院中可真熱鬧,春花似錦蕊连、人聲如沸悬垃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尝蠕。三九已至,卻和暖如春载庭,著一層夾襖步出監(jiān)牢的瞬間看彼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工囚聚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留靖榕,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓顽铸,卻偏偏與公主長得像茁计,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谓松,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容