最大指望算法(Exception Maximization Algorithm,後文簡稱EM算法)是一種啓發式的迭代算法,用於實現用樣本對含有隱變量的模型的參數作極大似然估計。已知的機率模型內部存在隱含的變量,致使了不能直接用極大似然法來估計參數,EM算法就是經過迭代逼近的方式用實際的值帶入求解模型內部參數的算法。html
算法的形式以下:java
隨機對參數賦予初值; While(求解參數不穩定){ E步驟:求在當前參數值和樣本下的指望函數Q; M步驟:利用指望函數從新計算模型中新的估計值; }
上面的僞代碼形式可能過於抽象,就結合一個實際的例子來講明。算法
例子:存在3枚硬幣A,B和C,拋出正面的機率是π,p和q。進行以下拋硬幣的試驗:先拋硬幣A,若是A是正面則須要拋硬幣B,不然就拋硬幣C。若是B或C是正面結果爲1,不然結果爲0;獨立進行n次試驗。取n = 10,獲得的觀測結果以下:函數
1,1,0,1,0,0,1,0,1,1學習
每一枚硬幣的分佈都是一個二項分佈,而A,B,C三個硬幣對應的事件之間又潛在有某種聯繫。用Y表示觀測變量,對於第i次觀測結果的值記做yi,用向量θ來表示整個模型中的未知參數π,p和q,則整個三幣模型的機率能夠表示爲:3d
若是採用最大似然估計法來求解公式(1),以此來估計模型中的參數,即求解下式:htm
因爲公式(1)內部包含了+號,很難直接求偏導求解獲得參數的估計值。必須尋求其餘的辦法解決這個問題,現引入一個隱含變量Z表示在試驗中拋擲A硬幣的結果(1表明正面,0表明反面),就能夠將原先的似然函數轉換成下式:blog
咱們給出E步驟中指望函數Q的定義以下,具體的證實會放到下一節:事件
對於上面的例子, P(Z|Y, θ(i)) =(zπpy(1-p)1-y + (1-z)(1-π)qy(1-q)1-y)/ P(Y|θ),上式中沒有未知的參數(Z的值在每次累加時被肯定),因此能夠直接算出具體的值。將計算出的結果帶入(4)式咱們就獲得了指望函數。get
在M步驟中,分別對θ向量的每個份量求其偏導,另偏導數的值等於零求出極大值獲得新的參數估計值,重複以上兩個步驟,直到收斂。
在推導EM算法以前,有一些基本的數學概念須要從新梳理一下,以即可以透徹得理解EM算法。
極大似然估計是最經常使用的一種點估計方法,極大似然估計基於的一個直觀想法就是「機率最大的事件最有可能出現」。假設有一系列事件A1,A2,…,An被觀測到發生了,且事件Ai發生的機率爲pi,就有理由相信事件序列A1,A2,…,An的理論機率是最大的,因此有max pi(1<=i<=n),以此能夠估計出機率模型中參數。
利用極大似然估計方法進行參數估計,必須知道整體的機率分佈類型。構造一個似然函數,將樣本的觀察值帶入似然函數,對某一個參數求偏導數另其爲零,算出極值點的參數值就是估計獲得的參數結果,用θ表示須要估計的參數向量,xi表示第i個樣本的觀測結果,似然函數的形式能夠是:
Jessen不等式的形式以下:
f(E(X)) ≥ E[f(x)],當函數f(x)是一個凹函數時成立,且等號只有知足對於任意x,都有E(X) = x時取到。
要理解Jessen不等式,能夠參考下圖。在圖中曲線f(x)上取任意兩點x,y,有不等式f(1/2(x+y))≥ 1/2[f(x) + f(y)]恆成立,將這個不等式推廣到多維向量且考慮向量分佈不均勻的狀況,不等式左邊就是f(E(X)),右邊就是E(f(x))。
要用極大似然估計方法來肯定模型中的參數,就是要計算在似然函數L(θ)最大化的時候對應的參數的值,上一節中已經提過對於含有隱含變量的模型,直接經過求偏導數的方法來肯定似然函數的極大值是很困難的。在EM算法的求解過程當中,每一次迭代構造了一個新的下界函數,最大化這個下界函數來逼近實際的似然函數,求解獲得一個局部最優的極值。
假設在EM算法的求解過程當中,通過第i次迭代後獲得的參數向量爲θ(i),這裏咱們以這組參數值做爲觀測點,以此估計隱含變量的機率分佈;將這個分佈帶入似然函數的公式獲得近似的L(θ(i)),考慮真實的似然函數與近似似然函數之間的差值:
由(6)和(7)能夠構造似然函數的一個下界函數B(θ, θ(i)),有以下結論:
如今仔細回憶一下,模型中的參數之因此難以直接求解的根本緣由是:在這一類問題中,實際上存在兩類參數,一類是模型自帶的參數向量θ,第二類是受這個參數影響的隱藏變量Z。在EM算法的第i次迭代的過程當中,利用θ(i)構造了隱含變量Z的分佈有效得消除了Z對結果的影響,同時根據Jessen不等式的性質,咱們也可以保證構造的下界函數與似然函數之間必然有交點,且始終處於了似然函數圖像的下方。
總結EM算法的E步驟,包含了以下幾個操做:
以後再M步驟中,經過極大化下界函數獲得一組新的參數向量θ(i+1),如此循環既能夠求出似然函數的一個局部最優。用一幅圖像更直觀得展示這第i次迭代的過程:
由公式(8)可知,下界函數由兩個部分組成,在參數θ(i)肯定的條件下,L(θ(i))就是一個常量,極大化下界函數等價於極大化公式(7)中的G(θ,θ(i)),同時將G(θ,θ(i))在log內部的對求極大值沒有影響的常量部分P(Y,Z|θ(i)),即證最大化下界函數等價於證實公式(4)中的Q(θ,θ(i))。
補充幾點關於EM算法的細節,從圖中也能夠清晰得看出:
a) EM算法是一種初始值敏感的算法,選取不一樣初始參數會有不一樣的最終結果;
b) EM算法獲得的不會是全局最優,每次迭代逼近的都是當前的局部最優。
以前已經證實了能夠經過定點參數值估計隱含變量的分佈,並以此來構造下界函數,經過極大化下界函數來逼近似然函數的極大值。要證實EM算法的合理性,還有一個關鍵點就是,是否是每一次迭代都一定能比以前更優,即證實算法的收斂性。
已知條件機率公式:
將公式(11) 帶入(10)中而且在兩邊同時乘以P(Z|Y, θ(i)),能夠獲得下式:
解釋一下上面的公式,第一個不等號是調用了Jessen不等式,在EM算法M步驟中θ(i+1)是使Q(θ,θ(i))取極大值的參數,因此φ一定是大於等於零的值。
[1]. 《統計學習方法》李航
[2]. https://www.coursera.org/course/ml
[3]. http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
[4]. http://www.cnblogs.com/mindpuzzle/archive/2013/04/05/2998746.html
整理完成這篇文章前先後後花了本人接近半個月的時間(各期間種瑣事,還生病靜養了好幾天),寫得也是斷斷續續,可是總算是基本完成了。EM算法雖然看似結構簡單,可是其證實和內部的數學原理理解起來仍是相對有些難度的。期間找了至關多的資料進行參考,發現不少文章裏都夾雜了過多複雜的公式,看着也很頭疼。在整理的過程當中,我也儘可能的避免大範圍得套用數學數學公式。