機器學習 03 EM演算法學習筆記

2021-10-05 12:07:31 字數 2826 閱讀 7594

假設有兩枚硬幣a和b,每次選乙個硬幣來拋10次。現在已經進行了5輪(也就是選了5次硬幣,並分別拋了10次)結果如下(h表示正面,t表示反面):

假定隨機拋擲後正面朝上概率分別為pa,pb。為了估計這兩個硬幣朝上的概率,咱們輪流拋硬幣a和b,每一輪都連續拋5次,總共5輪:

硬幣結果統計a

正正反正反

3正-2反

b反反正正反

2正-3反

a正反反反反

1正-4反

b正反反正正

3正-2反

a反正正反反

2正-3反

硬幣a被拋了15次,在第一輪、第三輪、第五輪分別出現了3次正、1次正、2次正,所以很容易估計出pa,類似的,pb也很容易計算出來,如下:

pa = (3+1+2)/ 15 = 0.4

pb= (2+3)/10 = 0.5

問題來了,如果我們不知道拋的硬幣是a還是b呢(即硬幣種類是隱變數),然後再輪流拋五輪,得到如下結果:

硬幣結果

統計unknown

正正反正反

3正-2反

unknown

反反正正反

2正-3反

unknown

正反反反反

1正-4反

unknown

正反反正正

3正-2反

unknown

反正正反反

2正-3反

ok,問題變得有意思了。現在我們的目標沒變,還是估計pa和pb,需要怎麼做呢?

顯然,此時我們多了乙個硬幣種類的隱變數,設為z,可以把它認為是乙個5維的向量(z1,z2,z3,z4,z5),代表每次投擲時所使用的硬幣,比如z1,就代表第一輪投擲時使用的硬幣是a還是b。

但是,這個變數z不知道,就無法去估計pa和pb,所以,我們必須先估計出z,然後才能進一步估計pa和pb。

可要估計z,我們又得知道pa和pb,這樣我們才能用極大似然概率法則去估計z,這不是雞生蛋和蛋生雞的問題嗎,如何破?

答案就是先隨機初始化乙個pa和pb,用它來估計z,然後基於z,還是按照最大似然概率法則去估計新的pa和pb,如果新的pa和pb和我們初始化的pa和pb一樣,請問這說明了什麼?

這說明我們初始化的pa和pb是乙個相當靠譜的估計!

就是說,我們初始化的pa和pb,按照最大似然概率就可以估計出z,然後基於z,按照最大似然概率可以反過來估計出p1和p2,當與我們初始化的pa和pb一樣時,說明是p1和p2很有可能就是真實的值。這裡面包含了兩個互動的最大似然估計。

如果新估計出來的pa和pb和我們初始化的值差別很大,怎麼辦呢?就是繼續用新的p1和p2迭代,直至收斂。

我們不妨這樣,先隨便給pa和pb賦乙個值,比如:

硬幣a正面朝上的概率pa = 0.2

硬幣b正面朝上的概率pb = 0.7

然後,我們看看第一輪拋擲最可能是哪個硬幣。

如果是硬幣a,得出3正2反的概率為 0.20.20.20.80.8 = 0.00512

如果是硬幣b,得出3正2反的概率為0.70.70.70.30.3=0.03087

然後依次求出其他4輪中的相應概率。做成**如下(標粗表示其概率更大):

輪數若是硬幣a

若是硬幣b

10.00512,即0.2 0.2 0.2 0.8 0.8,3正-2反

0.03087,3正-2反

20.02048,即0.2 0.2 0.8 0.8 0.8,2正-3反

0.01323,2正-3反

30.08192,即0.2 0.8 0.8 0.8 0.8,1正-4反

0.00567,1正-4反

40.00512,即0.2 0.2 0.2 0.8 0.8,3正-2反

0.03087,3正-2反

50.02048,即0.2 0.2 0.8 0.8 0.8,2正-3反

0.01323,2正-3反

按照最大似然法則:

第1輪中最有可能的是硬幣b

第2輪中最有可能的是硬幣a

第3輪中最有可能的是硬幣a

第4輪中最有可能的是硬幣b

第5輪中最有可能的是硬幣a

我們就把概率更大,即更可能是a的,即第2輪、第3輪、第5輪出現正的次數2、1、2相加,除以a被拋的總次數15(a拋了三輪,每輪5次),作為z的估計值,b的計算方法類似。然後我們便可以按照最大似然概率法則來估計新的pa和pb。

pa = (2+1+2)/15 = 0.33

pb =(3+3)/10 = 0.6

設想我們是全知的神,知道每輪拋擲時的硬幣就是如本文本節開頭標示的那樣,那麼,pa和pb的最大似然估計就是0.4和0.5(下文中將這兩個值稱為pa和pb的真實值)。那麼對比下我們初始化的pa和pb和新估計出的pa和pb:

初始化的pa

估計出的pa

真實的pa

初始化的pb

估計出的pb

真實的pb

0.20.33

0.40.7

0.60.5

看到沒?我們估計的pa和pb相比於它們的初始值,更接近它們的真實值了!就這樣,不斷迭代 不斷接近真實值,這就是em演算法的奇妙之處。

可以期待,我們繼續按照上面的思路,用估計出的pa和pb再來估計z,再用z來估計新的pa和pb,反覆迭代下去,就可以最終得到pa = 0.4,pb=0.5,此時無論怎樣迭代,pa和pb的值都會保持0.4和0.5不變,於是乎,我們就找到了pa和pb的最大似然估計。

EM演算法學習筆記詳解

基於李航的 統計學習方法 對em演算法學習的介紹性筆記。一.預備知識 在正式介紹em演算法之前,先介紹推導em演算法用到的數學基礎知識,包括凹凸函式,jensen不等式。上凸函式 函式f x 滿足對定義域上任意兩個數a,b都有f a b 2 f a f b 2 下凸函式 函式f x 滿足對定義域上任...

EM演算法學習 三

在前兩篇文章中,我們已經大致的講述了關於em演算法的一些基本理論和一些基本的性質,以及針對em演算法的缺點進行的優化改進的新型em演算法,研究之後大致就能夠進行初步的了解.現在在這最後一篇文章,我想對em演算法的應用進行一些描述 em演算法在多元正態分佈缺失的資料下一般都是有較為廣泛的應用,所以在這...

機器學習 EM演算法

em演算法 最大期望演算法 expectation maximization algorithm,em 是為處理缺失資料的引數的估計問題,主要分為e步和m步交替組成,對給定的初始引數依賴較大。from numpy import import numpy as np import matplotlib...