最近在學習機器學習這門課,目前學到了em演算法的部分。在網上看到了一些人比較好的理解。在此記錄下來
em演算法即「期望極大演算法」。學過機器學習的朋友都知道em演算法分兩步:e步求期望,m步求極大。但是期望是求誰的期望,極大是求誰的極大呢?這裡面其實有兩種解讀角度。
通俗角度的話,求極大肯定是求似然函式的極大了,而且一般都是對數似然。我們一般解決模型引數求解問題,都是在給定資料的情況下,求解使得似然函式最大的引數的取值。用公式表示就是: θ
^=ar
gmaxθl
ogp(
x|θ)
通常的做法是對似然函式求偏導,然後令偏導等於零,引數取得的數值就是近似最優值。但是,有些含有隱變數的模型沒辦法直接進行似然函式的偏導,但是如果假設已經知道隱變數的值,就可以將似然函式簡化進行下一步的求偏導。
因此,我們需要引入乙個隱變數,求這個隱變數的期望就成了這種理解角度下e步驟。然後將隱變數的期望代入到經過隱變數改寫的對數似然函式中,就可以按照通常的極大似然估計求解引數了。不過需要不斷迭代才能達到近似最優。
總結起來,這種角度的em演算法框架如下:
loop
end
這種角度的好處是由一般的極大似然估計自然地引入到em方法,比較容易理解;但是缺點是一般很難寫出引入隱變數的似然函式的改寫。實際上,這種改寫很多情況下是依據em演算法的另乙個理解角度而直接寫出來的。
看過em演算法推導過程的朋友應該都知道,有乙個概念叫做「q函式」;還有em演算法是通過不斷求解下界的極大化逼近求解對數似然函式的極大化。那麼,這個q函式是怎麼來的呢?em演算法是怎麼不斷求解下界的極大化呢?
em演算法通過迭代逐步近似極大化l(
θ)。假設在第i次迭代後
θ 的估計值是θ(
i)。我們希望新估計值
θ 能使l(
θ)增加,即l(
θ)>l(
θ(i)
) ,並逐步達到極大值。為此,考慮兩者的差: l
(θ)−
l(θ(
i))
然後,利用jensen不等式得到其下界: b
(θ,θ
(i))
。具體怎麼得到的可以參考《統計學習方法》。
因此,任何可以使b(
θ,θ(
i)) 增大的
θ ,也可以使l(
θ)增大。為了使l(
θ)有盡可能的增長,選擇θ(
i)使b(
θ,θ(
i)) 達到極大。在使b(
θ,θ(
i)) 達到極大的過程中,省去對
θ 的極大化而言是常數的項,剩下的部分,我們給它起了乙個名字,就叫做:q函式。
從形式上看,q函式是完全資料的對數似然函式關於在給定觀測資料和當前引數下對未觀測資料的條件概率分布的期望。
總結起來,這種角度的em演算法框架如下:
loop
end
這裡面有幾個細節需要說明一下;
在使用jensen不等式的時候,需要假設隱變數服從某種形式的概率分布,才可以將推導過程的一部分看成是期望的表達形式從而應用jensen不等式。然而這個分布不是隨便指定的。我們令jensen不等式取等號的時候,可以計算出這個分布其實就是:已知觀測資料的隱變數的後驗概率分布。由於求q函式需要先求出隱變數的後驗概率的期望,因此,這就可以解釋為什麼em演算法的「通俗」理解角度的e步驟是求隱變數的期望了。
有時候在用em演算法解決某個具體問題的時候,會發現m步驟極大化的居然是完全資料的對數似然函式。這是因為,q函式雖然是完全資料的對數似然函式的某種期望,但是求這個期望的過程有時其實就是將隱變數的後驗概率的期望代入就可以了。因此,本質上我們其實還是在求q函式的極大。
兩種堆疊的理解
堆 堆是一顆完全二叉樹,優先佇列,根節點的值大於 小於 子節點。堆是一種經過排序的樹形資料結構,每個結點都有一值。通常我們所說的堆的資料結構,是指二叉堆。堆的特點是根結點的值最小 或最大 且根結點的兩個子樹也是乙個堆。由於堆的這個特性,常用來實現優先佇列,堆的訪問是隨意,這就如同我們在圖書館的書架上...
EM演算法的理解
建議先看一下下面這篇關於極大似然函式的理解,要不下面理解起來有點困難。極大似然的理解 還是上面的部落格中的例子。你想要的知道學校的男生和女生的身高分布。你該怎麼做呢?首先假設全校同學的身高分布是符合正態分佈的。那麼,我們就需要知道正態分佈的均值和方差。那該怎麼求呢?總不能全部統計一下吧,這樣太費時費...
兩種檢索演算法
問題 在乙個排好序的陣列t 1 n 中查詢x,如果x在t中,輸出x在t的下標j 如果x不在t中,輸出j 1 這裡為了區分與下標0的區別改為了 1 解析 如何在乙個有序的陣列中查詢出乙個元素,無外就幾種情況,要麼採用順序查詢,要麼採用分治思想逐步排查或者使用雜湊值等進行查詢。順序查詢沒什麼好解釋的就是...