【機器學(xué)習(xí)】嘿馬機器學(xué)習(xí)(算法篇)第6篇:EM算法,3.3 EM算法實例【附代碼文檔】

教程全知識點簡介:1.定位、目標。2. K-近鄰算法涵蓋距離度量、k值選擇、kd樹、鳶尾花種類預(yù)測數(shù)據(jù)集介紹、練一練、交叉驗證網(wǎng)格搜索、facebook簽到位置預(yù)測案例。3. 線性回歸包括線性回歸簡介、線性回歸損失和優(yōu)化、梯度下降法介紹、波士頓房價預(yù)測案例、欠擬合和過擬合、正則化線性模型、正規(guī)方程推導(dǎo)方式、梯度下降法算法比較優(yōu)化、維災(zāi)難。4. 邏輯回歸涵蓋邏輯回歸介紹、癌癥分類預(yù)測案例(良惡性乳腺癌腫瘤預(yù)測、獲取數(shù)據(jù))、ROC曲線繪制。5. 樸素貝葉斯算法包括樸素貝葉斯算法簡介、概率基礎(chǔ)復(fù)習(xí)、商品評論情感分析案例(取出內(nèi)容列數(shù)據(jù)分析、判定評判標準好評差評)。6. 支持向量機涵蓋SVM算法原理、SVM損失函數(shù)、數(shù)字識別器案例。7. 決策樹算法包括決策樹分類原理、cart剪枝、特征工程特征提取、決策樹算法api、泰坦尼克號乘客生存預(yù)測案例。8. EM算法涵蓋初識EM算法、EM算法介紹。9. HMM模型包括馬爾科夫鏈、HMM簡介、前向后向算法評估觀察序列概率、維特比算法解碼隱藏狀態(tài)序列、HMM模型API介紹。10. 集成學(xué)習(xí)進階涵蓋Bagging、xgboost算法原理、otto案例(Otto Group Product Classification Challenge xgboost實現(xiàn))、數(shù)據(jù)變化可視化、lightGBM、stacking算法基本思想、住房月租金預(yù)測。11. 聚類算法包括聚類算法api初步使用、聚類算法實現(xiàn)流程、模型評估、算法優(yōu)化、特征降維、用戶對物品類別喜好細分案例、算法選擇指導(dǎo)。12. 數(shù)學(xué)基礎(chǔ)涵蓋向量與矩陣范數(shù)、朗格朗日乘子法、Huber Loss、極大似然函數(shù)取對數(shù)原因。

?????????https://gitee.com/yinuo112/AI/blob/master/機器學(xué)習(xí)/嘿馬機器學(xué)習(xí)(算法篇)/note.md

EM算法


學(xué)習(xí)目標

  • 了解什么是EM算法
  • 知道極大似然估計
  • 知道EM算法實現(xiàn)流程

3.3 EM算法實例

學(xué)習(xí)目標

  • 通過實例了解EM算法實現(xiàn)的流程

1 一個超級簡單的案例

假設(shè)現(xiàn)在有兩枚硬幣1和2,,隨機拋擲后正面朝上概率分別為P1,P2。為了估計這兩個概率,做實驗,每次取一枚硬幣,連擲5下,記錄下結(jié)果,如下:

硬幣 結(jié)果 統(tǒng)計
1 正正反正反 3正-2反
2 反反正正反 2正-3反
1 正反反反反 1正-4反
2 正反反正正 3正-2反
1 反正正反反 2正-3反

可以很容易地估計出P1和P2,如下:

P1 = (3+1+2)/ 15 = 0.4 P2= (2+3)/10 = 0.5

到這里,一切似乎很美好,下面我們加大難度。

2 加入隱變量z后的求解

還是上面的問題,現(xiàn)在我們抹去每輪投擲時使用的硬幣標記,如下:

硬幣 結(jié)果 統(tǒng)計
Unknown 正正反正反 3正-2反
Unknown 反反正正反 2正-3反
Unknown 正反反反反 1正-4反
Unknown 正反反正正 3正-2反
Unknown 反正正反反 2正-3反

好了,現(xiàn)在我們的目標沒變,還是估計P1和P2,要怎么做呢?

顯然,此時我們多了一個隱變量z,可以把它認為是一個5維的向量(z1,z2,z3,z4,z5),代表每次投擲時所使用的硬幣,比如z1,就代表第一輪投擲時使用的硬幣是1還是2。但是,這個變量z不知道,就無法去估計P1和P2,所以,我們必須先估計出z,然后才能進一步估計P1和P2。

但要估計<span>zzz</span>

答案就是先隨機初始化一個P1和P2,用它來估計z,然后基于z,還是按照最大似然概率法則去估計新的P1和P2,如果新的P1和P2和我們初始化的P1和P2一樣,請問這說明了什么?(此處思考1分鐘)

這說明我們初始化的P1和P2是一個相當靠譜的估計!

就是說,我們初始化的P1和P2,按照最大似然概率就可以估計出z,然后基于z,按照最大似然概率可以反過來估計出P1和P2,當與我們初始化的P1和P2一樣時,說明是P1和P2很有可能就是真實的值。這里面包含了兩個交互的最大似然估計。

如果新估計出來的P1和P2和我們初始化的值差別很大,怎么辦呢?就是繼續(xù)用新的P1和P2迭代,直至收斂。

這就是下面的EM初級版。

2.1 EM初級版

我們不妨這樣,先隨便給P1和P2賦一個值,比如:

  • P1 = 0.2
  • P2 = 0.7

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

  • 如果是硬幣1,得出3正2反的概率為<span>0.2?0.2?0.2?0.8?0.8=0.005120.20.20.20.80.8 = 0.005120.2?0.2?0.2?0.8?0.8=0.00512</span>
  • 如果是硬幣2,得出3正2反的概率為<span>0.7?0.7?0.7?0.3?0.3=0.030870.70.70.70.30.3=0.030870.7?0.7?0.7?0.3?0.3=0.03087</span>

然后依次求出其他4輪中的相應(yīng)概率。做成表格如下:

輪數(shù) 若是硬幣1 若是硬幣2
1 0.00512 0.03087
2 0.02048 0.01323
3 0.08192 0.00567
4 0.00512 0.03087
5 0.02048 0.01323

按照最大似然法則:

  • 第1輪中最有可能的是硬幣2
  • 第2輪中最有可能的是硬幣1
  • 第3輪中最有可能的是硬幣1
  • 第4輪中最有可能的是硬幣2
  • 第5輪中最有可能的是硬幣1

我們就把上面的值作為z的估計值。然后按照最大似然概率法則來估計新的P1和P2。

  • P1 = (2+1+2)/15 = 0.33
  • P2=(3+3)/10 = 0.6

設(shè)想我們是全知的神,知道每輪拋擲時的硬幣就是如本文第001部分標示的那樣,那么,P1和P2的最大似然估計就是0.4和0.5(下文中將這兩個值稱為P1和P2的真實值)。那么對比下我們初始化的P1和P2和新估計出的P1和P2:

初始化的P1 估計出的P1 真實的P1
0.2 0.33 0.4
初始化的P2 估計出的P2 真實的P2
0.7 0.6 0.5

看到?jīng)]?我們估計的P1和P2相比于它們的初始值,更接近它們的真實值了!

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

這里有兩個問題:

  • 1、新估計出的P1和P2一定會更接近真實的P1和P2?

    • 答案是:沒錯,一定會更接近真實的P1和P2,數(shù)學(xué)可以證明,但這超出了本文的主題,請參閱其他書籍或文章。
  • 2、迭代一定會收斂到真實的P1和P2嗎?

    • 答案是:不一定,取決于P1和P2的初始化值,上面我們之所以能收斂到P1和P2,是因為我們幸運地找到了好的初始化值。

2.2 EM進階版

下面,我們思考下,上面的方法還有沒有改進的余地?

我們是用最大似然概率法則估計出的z值,然后再用z值按照最大似然概率法則估計新的P1和P2。也就是說,我們使用了一個最可能的z值,而不是所有可能的z值。

如果考慮所有可能的z值,對每一個z值都估計出一個新的P1和P2,將每一個z值概率大小作為權(quán)重,將所有新的P1和P2分別加權(quán)相加,這樣的P1和P2應(yīng)該會更好一些。

所有的z值有多少個呢?

  • 顯然,有<span>25=322^5=3225=32</span>

不需要,我們可以用期望來簡化運算。

輪數(shù) 若是硬幣1 若是硬幣2
1 0.00512 0.03087
2 0.02048 0.01323
3 0.08192 0.00567
4 0.00512 0.03087
5 0.02048 0.01323

利用上面這個表,我們可以算出每輪拋擲中使用硬幣1或者使用硬幣2的概率。

比如第1輪,使用硬幣1的概率是:

  • <span>0.00512/(0.00512+0.03087)=0.140.00512/(0.00512+0.03087)=0.140.00512/(0.00512+0.03087)=0.14</span>

使用硬幣2的概率是1-0.14=0.86

依次可以算出其他4輪的概率,如下:

輪數(shù) zi=z_i=zi= zi=z_i=zi=
1 0.14 0.86
2 0.61 0.39
3 0.94 0.06
4 0.14 0.86
5 0.61 0.39

上表中的右兩列表示期望值??吹谝恍校?.86表示,從期望的角度看,這輪拋擲使用硬幣2的概率是0.86。相比于前面的方法,我們按照最大似然概率,直接將第1輪估計為用的硬幣2,此時的我們更加謹慎,我們只說,有0.14的概率是硬幣1,有0.86的概率是硬幣2,不再是非此即彼。這樣我們在估計P1或者P2時,就可以用上全部的數(shù)據(jù),而不是部分的數(shù)據(jù),顯然這樣會更好一些。

這一步,我們實際上是估計出了z的概率分布,這步被稱作E步。

結(jié)合下表:

硬幣 結(jié)果 統(tǒng)計
Unknown 正正反正反 3正-2反
Unknown 反反正正反 2正-3反
Unknown 正反反反反 1正-4反
Unknown 正反反正正 3正-2反
Unknown 反正正反反 2正-3反

我們按照期望最大似然概率的法則來估計新的P1和P2:

以P1估計為例,第1輪的3正2反相當于

  • 0.14*3=0.42正
  • 0.14*2=0.28反

依次算出其他四輪,列表如下:

輪數(shù) 正面 反面
1 0.42 0.28
2 1.22 1.83
3 0.94 3.76
4 0.42 0.28
5 1.22 1.83
總計 4.22 7.98

P1=4.22/(4.22+7.98)=0.35

可以看到,改變了z值的估計方法后,新估計出的P1要更加接近0.4。原因就是我們使用了所有拋擲的數(shù)據(jù),而不是之前只使用了部分的數(shù)據(jù)。

這步中,我們根據(jù)E步中求出的z的概率分布,依據(jù)最大似然概率法則去估計P1和P2,被稱作M步。


3 小結(jié)

  • EM算法的實現(xiàn)思路:

    • 首先根據(jù)己經(jīng)給出的觀測數(shù)據(jù),估計出模型參數(shù)的值;
    • 然后再依據(jù)上一步估計出的參數(shù)值估計缺失數(shù)據(jù)的值,再根據(jù)估計出的缺失數(shù)據(jù)加上之前己經(jīng)觀測到的數(shù)據(jù)重新再對參數(shù)值進行估計;
    • 然后反復(fù)迭代,直至最后收斂,迭代結(jié)束。

EM算法


學(xué)習(xí)目標

  • 了解什么是EM算法
  • 知道極大似然估計
  • 知道EM算法實現(xiàn)流程

HMM模型

學(xué)習(xí)目標

  • 了解什么是馬爾科夫鏈
  • 知道什么是HMM模型
  • 知道前向后向算法評估觀察序列概率
  • 知道維特比算法解碼隱藏狀態(tài)序列
  • 了解鮑姆-韋爾奇算法
  • 知道HMM模型API的使用

4.1 馬爾科夫鏈

學(xué)習(xí)目標

  • 知道什么是馬爾科夫鏈

在機器學(xué)習(xí)算法中,馬爾可夫鏈(Markov chain)是個很重要的概念。馬爾可夫鏈(Markov chain),又稱離散時間馬爾可夫鏈(discrete-time Markov chain),因俄國數(shù)學(xué)家安德烈·馬爾可夫(俄語:Андрей Андреевич Марков)得名。

1 簡介

馬爾科夫鏈即為狀態(tài)空間中從一個狀態(tài)到另一個狀態(tài)轉(zhuǎn)換的隨機過程。

  • 該過程要求具備“無記憶”的性質(zhì):

    • 下一狀態(tài)的概率分布只能由當前狀態(tài)決定,在時間序列中它前面的事件均與之無關(guān)。這種特定類型的“無記憶性”稱作馬爾可夫性質(zhì)。
  • 馬爾科夫鏈作為實際過程的統(tǒng)計模型具有許多應(yīng)用。

  • 在馬爾可夫鏈的每一步,系統(tǒng)根據(jù)概率分布,可以從一個狀態(tài)變到另一個狀態(tài),也可以保持當前狀態(tài)。

  • 狀態(tài)的改變叫做轉(zhuǎn)移,與不同的狀態(tài)改變相關(guān)的概率叫做轉(zhuǎn)移概率。

  • 馬爾可夫鏈的數(shù)學(xué)表示為:

  • 既然某一時刻狀態(tài)轉(zhuǎn)移的概率只依賴前一個狀態(tài),那么只要求出系統(tǒng)中任意兩個狀態(tài)之間的轉(zhuǎn)移概率,這個馬爾科夫鏈的模型就定了。

2 經(jīng)典舉例

下圖中的馬爾科夫鏈是用來表示股市模型,共有三種狀態(tài):牛市(Bull market), 熊市(Bear market)和橫盤(Stagnant market)。

每一個狀態(tài)都以一定的概率轉(zhuǎn)化到下一個狀態(tài)。比如,牛市以0.025的概率轉(zhuǎn)化到橫盤的狀態(tài)。

  • 這個狀態(tài)概率轉(zhuǎn)化圖可以以矩陣的形式表示。
  • 如果我們定義矩陣陣P某一位置P(i, j)的值為P(j|i),即從狀態(tài)i變?yōu)闋顟B(tài)j的概率。
  • 另外定義牛市、熊市、橫盤的狀態(tài)分別為0、1、2,這樣我們得到了馬爾科夫鏈模型的狀態(tài)轉(zhuǎn)移矩陣為:

當這個狀態(tài)轉(zhuǎn)移矩陣P確定以后,整個股市模型就已經(jīng)確定!


3 小結(jié)

  • 馬爾科夫鏈即為

    • 狀態(tài)空間中從一個狀態(tài)到另一個狀態(tài)轉(zhuǎn)換的隨機過程。

    • 該過程要求具備“無記憶”的性質(zhì):

      • 下一狀態(tài)的概率分布只能由當前狀態(tài)決定,在時間序列中它前面的事件均與之無關(guān)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容