初始目的
將樣本分成K個類,其實說白了就是求一個樣本例的隱含類別y,然后利用隱含類別將x歸類。由於我們事先不知道類別y,那么我們首先可以對每個樣例假定一個y吧,但是怎么知道假定的對不對呢?怎樣評價假定的好不好呢?
我們使用樣本的極大似然估計來度量,這里就是x和y的聯合分布P(x,y)了。如果找到的y能夠使P(x,y)最大,那么我們找到的y就是樣例x的最佳類別了,x順手就聚類了。但是我們第一次指定的y不一定會讓P(x,y)最大,而且P(x,y)還依賴於其他未知參數,當然在給定y的情況下,我們可以調整其他參數讓P(x,y)最大。但是調整完參數后,我們發現有更好的y可以指定,那么我們重新指定y,然后再計算P(x,y)最大時的參數,反復迭代直至沒有更好的y可以指定。
這個過程有幾個難點:
第一怎么假定y?是每個樣例硬指派一個y還是不同的y有不同的概率,概率如何度量。
第二如何估計P(x,y),P(x,y)還可能依賴很多其他參數,如何調整里面的參數讓P(x,y)最大。
EM算法的思想:
E步就是估計隱含類別y的期望值,M步調整其他參數使得在給定類別y的情況下,極大似然估計P(x,y)能夠達到極大值。然后在其他參數確定的情況下,重新估計y,周而復始,直至收斂。
從K-means里我們可以看出它其實就是EM的體現,E步是確定隱含類別變量,M步更新其他參數
來使J最小化。這里的隱含類別變量指定方法比較特殊,屬於硬指定,從k個類別中硬選出一個給樣例,而不是對每個類別賦予不同的概率。總體思想還是一個迭代優化過程,有目標函數,也有參數變量,只是多了個隱含變量,確定其他參數估計隱含變量,再確定隱含變量估計其他參數,直至目標函數最優。
EM算法就是這樣,假設我們想估計知道A和B兩個參數,在開始狀態下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反過來知道了B也就得到了A。可以考慮首先賦予A某種初值,以此得到B的估計值,然后從B的當前值出發,重新估計A的取值,這個過程一直持續到收斂為止。
EM的意思是“Expectation Maximization”在我們上面這個問題里面,我們是先隨便猜一下男生(身高)的正態分布的參數:如均值和方差是多少。例如男生的均值是1米7,方差是0.1米(當然了,剛開始肯定沒那么准),然后計算出每個人更可能屬於第一個還是第二個正態分布中的(例如,這個人的身高是1米8,那很明顯,他最大可能屬於男生的那個分布),這個是屬於Expectation一步。有了每個人的歸屬,或者說我們已經大概地按上面的方法將這200個人分為男生和女生兩部分,我們就可以根據之前說的最大似然那樣,通過這些被大概分為男生的n個人來重新估計第一個分布的參數,女生的那個分布同樣方法重新估計。這個是Maximization。然后,當我們更新了這兩個分布的時候,每一個屬於這兩個分布的概率又變了,那么我們就再需要調整E步……如此往復,直到參數基本不再發生變化為止。