教程全知識點簡介: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)。