轉自:https://www.cnblogs.com/Gabby/p/5344658.html
我講EM算法的大概流程主要三部分:需要的預備知識、EM算法詳解和對EM算法的改進。
一、EM算法的預備知識
1、極大似然估計
(1)舉例說明:經典問題——學生身高問題
我們需要調查我們學校的男生和女生的身高分布。 假設你在校園里隨便找了100個男生和100個女生。他們共200個人。將他們按照性別划分為兩組,然后先統計抽樣得到的100個男生的身高。假設他們的身高是服從高斯分布的。但是這個分布的均值u和方差∂2我們不知道,這兩個參數就是我們要估計的。記作θ=[u, ∂]T。
問題:我們知道樣本所服從的概率分布的模型和一些樣本,而不知道該模型中的參數。
我們已知的有兩個:(1)樣本服從的分布模型(2)隨機抽取的樣本 需要通過極大似然估計求出的包括:模型的參數
總的來說:極大似然估計就是用來估計模型參數的統計學方法。
(2)如何估計
問題數學化: (1)樣本集X={x1,x2,…,xN} N=100 (2)概率密度:p(xi|θ)抽到男生i(的身高)的概率 100個樣本之間獨立同分布,所以我同時抽到這100個男生的概率就是他們各自概率的乘積。就是從分布是p(x|θ)的總體樣本中抽取到這100個樣本的概率,也就是樣本集X中各個樣本的聯合概率,用下式表示:
這個概率反映了,在概率密度函數的參數是θ時,得到X這組樣本的概率。 需要找到一個參數θ,其對應的似然函數L(θ)最大,也就是說抽到這100個男生(的身高)概率最大。這個叫做θ的最大似然估計量,記為
(3)求最大似然函數估計值的一般步驟
首先,寫出似然函數:
其次,對似然函數取對數,並整理:
然后,求導數,令導數為0,得到似然方程;
最后,解似然方程,得到的參數即為所求。
(4)總結
多數情況下我們是根據已知條件來推算結果,而極大似然估計是已經知道了結果,然后尋求使該結果出現的可能性最大的條件,以此作為估計值。
2、Jensen不等式
(1)定義
設f是定義域為實數的函數,如果對於所有的實數x。如果對於所有的實數x,f(x)的二次導數大於等於0,那么f是凸函數。 Jensen不等式表述如下: 如果f是凸函數,X是隨機變量,那么:E[f(X)]>=f(E[X]) 。當且僅當X是常量時,上式取等號。
(2)舉例
圖中,實線f是凸函數,X是隨機變量,有0.5的概率是a,有0.5的概率是b。X的期望值就是a和b的中值了,圖中可以看到E[f(X)]>=f(E[X])成立。 Jensen不等式應用於凹函數時,不等號方向反向。
二、傳統EM算法詳述
1、問題描述
我們抽取的100個男生和100個女生樣本的身高,但是我們不知道抽取的那200個人里面的每一個人到底是從男生的那個身高分布里面抽取的,還是女生的那個身高分布抽取的。 用數學的語言就是,抽取得到的每個樣本都不知道是從哪個分布抽取的。 這個時候,對於每一個樣本,就有兩個東西需要猜測或者估計: (1)這個人是男的還是女的?(2)男生和女生對應的身高的高斯分布的參數是多少?
EM算法要解決的問題是: (1)求出每一個樣本屬於哪個分布 (2)求出每一個分布對應的參數
2、舉例說明
身高問題使用EM算法求解步驟:
(1)初始化參數:先初始化男生身高的正態分布的參數:如均值=1.7,方差=0.1
(2)計算每一個人更可能屬於男生分布或者女生分布;
(3)通過分為男生的n個人來重新估計男生身高分布的參數(最大似然估計),女生分布也按照相同的方式估計出來,更新分布。
(4)這時候兩個分布的概率也變了,然后重復步驟(1)至(3),直到參數不發生變化為止。
3、算法推導
已知:樣本集X={x(1),…,x(m))},包含m個獨立的樣本;
未知:每個樣本i對應的類別z(i)是未知的(相當於聚類);
輸出:我們需要估計概率模型p(x,z)的參數θ;
目標:找到適合的θ和z讓L(θ)最大。
要使L(θ)最大,我們可以不斷最大化下界J,來使得L(θ)不斷提高,達到最大值。
問題:
什么時候下界J(z,Q)與L(θ)在此點θ處相等?
根據Jensen不等式,自變量X是常數,等式成立。即:
由於,則可以得到:分子的和等於c
在固定參數θ后,使下界拉升的Q(z)的計算公式,解決了Q(z)如何選擇的問題。這一步就是E步,建立L(θ)的下界。接下來的M步,就是在給定Q(z)后,調整θ,去極大化L(θ)的下界J。
4、算法流程
1)初始化分布參數θ; 重復以下步驟直到收斂:
E步驟:根據參數初始值或上一次迭代的模型參數來計算出隱性變量的后驗概率,其實就是隱性變量的期望。作為隱藏變量的現估計值:
M步驟:將似然函數最大化以獲得新的參數值:
5、總結
期望最大算法(EM算法)是一種從不完全數據或有數據丟失的數據集(存在隱含變量)中求解概率模型參數的最大似然估計方法。
三、EM算法的初始化研究
1、問題描述
EM算法缺陷之一:傳統的EM算法對初始值敏感,聚類結果隨不同的初始值而波動較大。總的來說,EM算法收斂的優劣很大程度上取決於其初始參數。
我看了一篇論文:地址:https://yunpan.cn/cqmW9vurLFmDT 訪問密碼 0e74
本篇論文采用的方法:采用一種基於網格的聚類算法來初始化EM算法。
2、基本思想
基於網格的聚類算法將數據空間的每一維平均分割成等長的區間段, 從而將數據空間分成不相交的網格單元。由於同個網格單元中的點屬於同一類的可能性比較大, 所以落入同一網格單元中的點可被看作一個對象進行處理, 以后所有的聚類操作都在網格單元上進行。 因此,基於網格的聚類過程只與網格單元的個數有關, 聚類的效率得到了很大的提高。
3、算法步驟
(1)定義:
(2)相似度:數據對象間的相似性是基於對象間的距離來計算的。
(3)輸入輸出:
(4)算法步驟
4、總結
我覺得這篇論文的主要思想應該是這樣的:就拿身高舉例。它就是首先做一個預處理,將身高在一個范圍內(例如1.71至1.74)的分成一個網格,再看這個網格占全部數據的多少,以此判斷出該網格為高密度還是低密度,然后循環算出所有網格的,再使用EM算法計算哪些高密度網格,這樣會使整個算法收斂的快一些。還有一些其他的論文也是講的這個。
轉自:http://blog.51cto.com/9269309/1892833
摘要
EM算法主要分為兩個步驟:E-step和M-step,主要應用在概率模型中。機器學習中,概率模型在進行參數估計時,我們主要應用的是最大似然估計,所以在對EM算法進行討論時,是離不開最大似然估計的。EM算法主要是用來解決那些樣本中存在隱變量的情況。E-step固定模型參數通過數學模型求解隱變量,M-step根據E-step求得的隱變量在通過最大似然估計最大化似然函數從而求出模型的參數,這樣相互的迭代,從而得到模型的局部最優解。EM算法主要應用在聚類算法中,因為一般情況下聚類問題都存在一個隱變量。
什么是隱變量
樣本中存在隱變量即我們在對數據進行采樣中,可以認為隱變量是那些我們不能通過數據采樣所能確定的屬性。如果不存在隱變量,那對於一些聚類模型,我們的參數求解就簡單很多,比如k-means,k-means只是利用了EM算法的思想。我們有一批數據,想利用k-means算法來進行聚類分析,對於k-means算法,我們要確定的是k和k個質心,假如我們在對這批數據采樣時已經知道他們分為4類,而且采樣前就已經把數據給分好類了,已經知道了,還用聚類算法干嘛,我們這是暫時的假設用他來舉例說明什么是隱變量,那么我們在用k-means算法時就變得很簡單了,直接求出這k個質心,而不用我們所熟知的k-means算法的計算步驟。之所以我們使用我們所熟知的k-means算法的步驟,那是因為我們不知道每個樣本應該歸屬於哪個類以及他們存在多少個聚類中心比較合適。那么這個隱變量就是每一個樣本應該歸屬於哪個類。在舉一個例子,高斯混合模型,這個是典型用到了EM算法的思想,如果對這個模型不太清楚,可以網上查資料。同樣,我們也有這樣一批數據,在采樣中,我們就已經知道k和每個樣本應該屬於哪個類,那么我們所要做的工作就是把每一類數據拿出來,直接通過均值和方差就可以求出每一個高斯函數的模型了,而不需要再進行EM算法通過最大似然估計來計算我們的高斯混合模型參數了。而現實的應用中是我們不知道這樣的一批數據應該分為幾個類以及每一個樣本應該屬於哪一個類,那么這就是隱變量。這樣的問題和先有雞還是先有蛋的問題差不多,當我們知道數學模型的參數后,我們就知道了樣本應該屬於哪個類,同時當我們知道隱變量后,我們也就知道樣本屬於哪個類,從而得到數學模型的參數,但是不幸的是在開始的時候我們只有樣本,隱變量和模型參數都不知道。
凸函數和凹函數以及其性質
為什么要講這個,因為EM算法得以實施的基礎就是函數的凹凸性以及凹凸函數的一些性質。所以這里還是說一下吧。
在高等數學和數學分析(數學專業的書)對於凹凸函數的定義可能有些不一樣。這個沒有關系只是叫法不同,但是他們這些圖形和圖形的性質是一樣的。
凸函數定義:函數的二階導函數在一定的區間內大於等於零,性質如下
如下圖:
凹函數的定義:函數的二階導函數在一定的區間內小於等於零,性質如下:
如下圖所示:
最大似然估計步驟
因為在概率模型中,進行參數估計一般都采用最大似然估計
1、確定概率模型求出似然函數
2、對似然函數取log,把連乘變為求和
3、對變換后的似然函數求導,並另導數等於0,然后整理得到似然方程組
4、求解似然方程組,得到模型參數
EM算法
假設我們有一批數據樣本{x(1),…,x(n)},,樣本容量為n,概率模型為p(x,z)來對我們的數據進行擬合。根據概率模型的參數估計算法,我們可以得到似然函數:
上式中(1)我們是通過最大似然估計的步驟獲取的,從(1)到(2)引入了樣本屬於某一個類的概率函數,從而對某一個樣本求得該樣本屬於某個類的全概率公式,即引入了隱變量z。
當我們采用傳統的概率模型求解參數的方法即最大似然估計,對上述式子進行求導數,從而得到似然方程:
我們會發現上述似然方程中存在對數,並且對數里面是個求和公式,這種求解是很難得到參數的解析解的。遇到胡同了,我們就要想一下拐一下彎,既然這個公式無法求解的難點在於對數里面有求和公式,那么我們能不能采用什么辦法把對數后面的求和號給拿到外面。再看看對數函數的性質是什么樣子的?對數函數是一個凹函數那么他肯定滿足凹函數的基本性質:
把上式進行變換:
我們的目標函數和凹函數的性質還差那么一點點的差距,那么我們就認為對於每一個實例i,用Qi表示對應於隱含變量即其屬於哪個類的概率分布,我們這是對於一個樣本而言的,那么樣本有n個,就會存在n個這樣的Qi的函數分布,一定要把這一點弄明白。這個Qi表示的樣本i對應於k個類,其屬於這k個類的概率分布。那么Qi應該滿足的條件是:
那么我們就可以把我們的似然函數進行改寫了:
這樣一看就和我們的凹函數性質一致了吧。於是我們可以把上述函數通過凹函數的性質進行變換:
既然原函數無法得到最優解,我們可以通過調整原函數的下界函數,對原函數的下界函數求最大值,從而使原函數逐步逼近最優解或者得到一個局部最優解。即我們不停的求解上式中(4)的最大值,從而是我們原函數逼近最優解。
看到這可能會有一個問題,通過最大似然估計得到的原似然方程無法得到解析解,為什么變成(4)就可以得到了呢?我們在已知隱變量的前提下對模型參數進行求偏導得到的似然方程中,發現log已經不復存,已經變成了我們熟悉的線性方程組或者非線性方程組(這個跟數學模型有關),一般情況下這個就可以利用線性代數的理論進行求解了啊。
因此EM算法的基本思想就是通過引入隱變量,先得到樣本屬於某一個類的概率,然后再使用最大似然估計最大化似然函數來求解參數,得到參數以后,數學模型就已經確定,那么我就可以得到樣本屬於哪個類了,從而得到隱變量的值,因此就用迭代的進行求解最終得到問題的解。當我們引入隱變量后,整個似然函數就會存在兩類參數類型:隱變量和數學模型的參數。那么EM算法采用的步驟如下:
E-step: 通過固定數學模型的參數,利用現有樣本對隱變量進行參數估計,即求出隱變量的期望也就是我們期望樣本屬於哪一個類
M-step: 通過E-step求得的隱變量,對數學模型參數求導,最大化似然函數。
隱變量的求解
對於EM算法,我們是不斷的逼近最優值,那么E-step計算的是什么呢?因為在凹函數的性質中上述不等式取等號的前提條件是xi為常數
則:
對上式進行求和:
通過上述兩個式子我們進行變換得到:
在上式中從(1)到(2)為什么會是這樣,我們按照舉個例子,用二元一次函數的積分問題來看待這個問題的推導,因為積分的實質也是一種求和對函數下部的面積進行無線的拆分然后再求和。如下式的二元函數:
然后我們對上面的二元一次函數對y進行求積分:
從而消除了變量y,同樣的道理,從(1)到(2)的過程中,我們分母對樣本i的所有的可能隱變量取值求和,從而把隱變量z給消除,從而得到公式(2)從(2)到(3)是通過條件概率的公式得到的。因此我們可以發現隱變量其實就是在固定數學模型參數和已知數據樣本的情況下的后驗概率。
以上只是理論部分,下面我們簡單說一下EM算法的實際應用。
在實際應用中我們不會按照上面公式來推導我們的算法。我們只知道兩個點就可以了:隱變量的求解和已知隱變量的前提下最大化似然函數從而來求解數學模型的參數。
隱變量的求解:我們已經知道其是樣本和數學模型參數的后驗概率,那么我就可以根據實際的情況來推導計算這個后驗概率從而得到我們的隱變量和參數的關系表達式從而用於迭代求解即為E-step
最大化似然函數:這個是我們最大似然估計算法的步驟了即M-step。