摘要算法
EM算法主要分爲兩個步驟:E-step和M-step,主要應用在機率模型中。機器學習中,機率模型在進行參數估計時,咱們主要應用的是最大似然估計,因此在對EM算法進行討論時,是離不開最大似然估計的。EM算法主要是用來解決那些樣本中存在隱變量的狀況。E-step固定模型參數經過數學模型求解隱變量,M-step根據E-step求得的隱變量在經過最大似然估計最大化似然函數從而求出模型的參數,這樣相互的迭代,從而獲得模型的局部最優解。EM算法主要應用在聚類算法中,由於通常狀況下聚類問題都存在一個隱變量。機器學習
什麼是隱變量ide
樣本中存在隱變量即咱們在對數據進行採樣中,能夠認爲隱變量是那些咱們不能經過數據採樣所能肯定的屬性。若是不存在隱變量,那對於一些聚類模型,咱們的參數求解就簡單不少,好比k-means,k-means只是利用了EM算法的思想。咱們有一批數據,想利用k-means算法來進行聚類分析,對於k-means算法,咱們要肯定的是k和k個質心,假如咱們在對這批數據採樣時已經知道他們分爲4類,並且採樣前就已經把數據給分好類了,已經知道了,還用聚類算法幹嗎,咱們這是暫時的假設用他來舉例說明什麼是隱變量,那麼咱們在用k-means算法時就變得很簡單了,直接求出這k個質心,而不用咱們所熟知的k-means算法的計算步驟。之因此咱們使用咱們所熟知的k-means算法的步驟,那是由於咱們不知道每一個樣本應該歸屬於哪一個類以及他們存在多少個聚類中心比較合適。那麼這個隱變量就是每個樣本應該歸屬於哪一個類。在舉一個例子,高斯混合模型,這個是典型用到了EM算法的思想,若是對這個模型不太清楚,能夠網上查資料。一樣,咱們也有這樣一批數據,在採樣中,咱們就已經知道k和每一個樣本應該屬於哪一個類,那麼咱們所要作的工做就是把每一類數據拿出來,直接經過均值和方差就能夠求出每個高斯函數的模型了,而不須要再進行EM算法經過最大似然估計來計算咱們的高斯混合模型參數了。而現實的應用中是咱們不知道這樣的一批數據應該分爲幾個類以及每個樣本應該屬於哪個類,那麼這就是隱變量。這樣的問題和先有雞仍是先有蛋的問題差很少,當咱們知道數學模型的參數後,咱們就知道了樣本應該屬於哪一個類,同時當咱們知道隱變量後,咱們也就知道樣本屬於哪一個類,從而獲得數學模型的參數,可是不幸的是在開始的時候咱們只有樣本,隱變量和模型參數都不知道。函數
凸函數和凹函數以及其性質學習
爲何要講這個,由於EM算法得以實施的基礎就是函數的凹凸性以及凹凸函數的一些性質。因此這裏仍是說一下吧。spa
在高等數學和數學分析(數學專業的書)對於凹凸函數的定義可能有些不同。這個沒有關係只是叫法不一樣,可是他們這些圖形和圖形的性質是同樣的。blog
凸函數定義:函數的二階導函數在必定的區間內大於等於零,性質以下數學
以下圖:it
凹函數的定義:函數的二階導函數在必定的區間內小於等於零,性質以下:io
以下圖所示:
最大似然估計步驟
由於在機率模型中,進行參數估計通常都採用最大似然估計
一、肯定機率模型求出似然函數
二、對似然函數取log,把連乘變爲求和
三、對變換後的似然函數求導,並另導數等於0,而後整理獲得似然方程組
四、求解似然方程組,獲得模型參數
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。
---能力有限,存在不對的地方,望請指教。