EM
EM 的英文是 Expectation Maximization,所以 EM 算法也叫最大期望算法。
例子
- 分菜
- 拋硬幣
EM 聚類三步驟
你能從這個例子中看到三個主要的步驟:初始化參數、觀察預期、重新估計。首先是先給每個碟子初始化一些菜量,然後再觀察預期,這兩個步驟實際上就是期望步驟(Expectation)。如果結果存在偏差就需要重新估計參數,這個就是最大化步驟(Maximization)。這兩個步驟加起來也就是 EM 算法的過程。
EM 算法的工作原理
說到 EM 算法,我們先來看一個概念“最大似然”,英文是 Maximum Likelihood,Likelihood 代表可能性,所以最大似然也就是最大可能性的意思。
- 什麼是最大似然呢?
舉個例子,有一男一女兩個同學,現在要對他倆進行身高的比較,誰會更高呢?根據我們的經驗,相同年齡下男性的平均身高比女性的高一些,所以男同學高的可能性會很大。這裏運用的就是最大似然的概念。
- 最大似然估計是什麼呢?
它指的就是一件事情已經發生了,然後反推更有可能是什麼因素造成的。還是用一男一女比較身高爲例,假設有一個人比另一個人高,反推他可能是男性。最大似然估計是一種通過已知結果,估計參數的方法。
- 那麼 EM 算法是什麼?它和最大似然估計又有什麼關係呢?
EM 算法是一種求解最大似然估計的方法,通過觀測樣本,來找出樣本的模型參數。
簡單總結下上面的步驟,你能看出 EM 算法中的 E 步驟就是通過舊的參數來計算隱藏變量。然後在 M 步驟中,通過得到的隱藏變量的結果來重新估計參數。直到參數不再發生變化,得到我們想要的結果。
EM 聚類的工作原理
上面你能看到 EM 算法最直接的應用就是求參數估計。如果我們把潛在類別當做隱藏變量,樣本看做觀察值,就可以把聚類問題轉化爲參數估計問題。這也就是 EM 聚類的原理。
總結
EM 算法相當於一個框架,你可以採用不同的模型來進行聚類,比如 GMM(高斯混合模型),或者 HMM(隱馬爾科夫模型)來進行聚類。GMM 是通過概率密度來進行聚類,聚成的類符合高斯分佈(正態分佈)。而 HMM 用到了馬爾可夫過程,在這個過程中,我們通過狀態轉移矩陣來計算狀態轉移的概率。HMM 在自然語言處理和語音識別領域中有廣泛的應用。
在 EM 這個框架中,E 步驟相當於是通過初始化的參數來估計隱含變量。M 步驟就是通過隱含變量反推來優化參數。最後通過 EM 步驟的迭代得到模型參數。
通過上面舉的炒菜的例子,你可以知道 EM 算法是一個不斷觀察和調整的過程。
通過求硬幣正面概率的例子,你可以理解如何通過初始化參數來求隱含數據的過程,以及再通過求得的隱含數據來優化參數。
通過上面 GMM 圖像聚類的例子,你可以知道很多 K-Means 解決不了的問題,EM 聚類是可以解決的。在 EM 框架中,我們將潛在類別當做隱藏變量,樣本看做觀察值,把聚類問題轉化爲參數估計問題,最終把樣本進行聚類。
EM 聚類的實戰,具體使用的是 GMM 高斯混合模型。從整個流程中可以看出,我們需要經過數據加載、數據探索、數據可視化、特徵選擇、GMM 聚類和結果分析等環節。
聚類和分類不一樣,聚類是無監督的學習方式,也就是我們沒有實際的結果可以進行比對,所以聚類的結果評估不像分類準確率一樣直觀,那麼有沒有聚類結果的評估方式呢?這裏我們可以採用 Calinski-Harabaz 指標。
指標分數越高,代表聚類效果越好,也就是相同類中的差異性小,不同類之間的差異性大。當然具體聚類的結果含義,我們需要人工來分析,也就是當這些數據被分成不同的類別之後,具體每個類表代表的含義。
另外聚類算法也可以作爲其他數據挖掘算法的預處理階段,這樣我們就可以將數據進行降維了。
思考
用自己的話說一下 EM 算法的原理嗎?EM 聚類和 K-Means 聚類的相同和不同之處又有哪些?
想起了一個故事,摘葉子:要找到最大的葉子
- 先心裏大概有一個葉子大小的概念(初始化模型)
- 在三分之一的的路程上,觀察葉子大小,並修改對大小的評估(觀察預期,並修改參數)
- 在三分之二的路程上,驗證自己對葉子大小模型的的評估(重複1,2過程)
- 在最後的路程上,選擇最大的葉子(重複1.2,直到參數不再改變)
相同點
- EM,KMEANS,都是隨機生成預期值,然後經過反覆調整,獲得最佳結果
- 聚類個數清晰
不同點
- EM是計算概率,KMeans是計算距離
- 計算概率,概率只要不爲0,都有可能即樣本是每一個類別都有可能
- 計算距離,只有近的票高,纔有可能,即樣本只能屬於一個類別
EM 就好像炒菜,做湯,鹽多了放水,味淡了再放鹽,直到合適爲止。然後,就能得出放鹽和水的比例(參數)