機器學習:半樸素貝葉斯分類器
請點選上面公眾號,免費訂閱。
主要推送關於對演算法的思考以及應用的訊息。培養思維能力,注重過程,挖掘背後的原理,刨根問底。本著嚴謹和準確的態度,目標是撰寫實用和啟發性的文章,歡迎您的關注。
01
—
回顧
最近,闡述了樸素貝葉斯的2個例子引出了樸素貝葉斯的分類原理,給出了蘋果的三個特徵通過樸素貝葉斯分類器預測了第11個蘋果是好果Or不好果,預測時發現某個分類中某個屬性值恰好在資料集中沒有出現,此時直接會抹去其他屬性值,這個是不合理的,因此又論述瞭如何用拉普拉斯修正來解決這個問題,具體參考:
昨天,建立在以上對樸素貝葉斯分類器理解和消化的基礎上,在Jupyter Notebook中親自實踐和實現了《自動單詞拼寫糾正器》,裡面帶有詳細的原理說明和實現 python原始碼,有需要的可以@我,這個還是非常有趣的,最近距離的體會機器學習帶給我們的快樂和興趣,歡迎閱讀和交流:
02
—
放鬆:屬性獨立假設
樸素貝葉斯分類器的一個重要假定:分類對應的各個屬性間是相互獨立的,然而在現實應用中,這個往往難以做到,那怎麼辦呢?
很簡單,適當考慮一部分屬性間的相互依賴關係,這種放鬆後的分類稱為半樸素貝葉斯分類,其中最常用的策略:假定每個屬性僅依賴於其他最多一個屬性,稱其依賴的這個屬性為其超父屬性,這種關係稱為:獨依賴估計(ODE)。
因此,對某個樣本x 的預測樸素貝葉斯公式就由如下:
修正為如下的半樸素貝葉斯分類器公式:
從上式中,可以看到類條件概率 P(xi | c) 修改為了 xi 依賴於分類c 和 一個依賴屬性pai 。
03
—
半樸素貝葉斯例子解釋
在闡述樸素貝葉斯分類器用到的資料集還是用到此處,資料集如下:
# | 大小 | 顏色 | 形狀 | 標籤 |
---|---|---|---|---|
1 | 小 | 青色 | 非規則 | 否 |
2 | 大 | 紅色 | 非規則 | 是 |
3 | 大 | 紅色 | 圓形 | 是 |
4 | 大 | 青色 | 圓形 | 否 |
5 | 大 | 青色 | 非規則 | 否 |
6 | 小 | 紅色 | 圓形 | 是 |
7 | 大 | 青色 | 非規則 | 否 |
8 | 小 | 紅色 | 非規則 | 否 |
9 | 小 | 青色 | 圓形 | 否 |
10 | 大 | 紅色 | 圓形 |
是 |
測試集上要預測的某個樣本如下:
# | 大小 | 顏色 | 形狀 | 標籤 |
---|---|---|---|---|
11 | 大 | 青色 | 圓形 |
? |
採用拉普拉斯修正後的先驗概率P(c)的計算公式:
基於類c和類外的依賴屬性pai的條件概率計算公式如下:
屬性的依賴關係定義如下:
-
大小的依賴屬性為:形狀,且屬性取值為大時依賴形狀為圓形;
-
顏色不存在依賴屬性;
-
形狀的依賴屬性為大小,且屬性取值為圓形時依賴大小為大;
則先驗概率 P(c) ,
P(c = 好果)= (4+1) / (10+2) = 5/12
P(c = 一般) = (6+1) / (10+2) = 7/12
帶有依賴屬性的類條件概率:
P(大小=大 | c=好果,形狀=圓形) = (2+1)/(3+2) = 3/5
P(顏色=青色 | c=好果) = (0+1)/(4+2) = 1/6
P(形狀=圓形 | c=好果,大小=大) = (2+1) / (3+2) = 3/5
P(大小=大 | c=一般,形狀=圓形) = (1+1) /( 2+2) = 2/4
P(顏色=青色 | c=一般) = (5+1)/(6+2) = 6/8
P(形狀=圓形 | c=一般,大小=大) = (1+1)/(3+2) = 2/5
因此:
P(c=好果) * P(大小=大 | c=好果,形狀=圓形) * P(顏色=青色 | c=好果) * P(形狀=圓形 | c=好果,大小=大)
= 5/12 * 3/5 * 1/6 * 3/5
= 0.025
P(c=一般) * P(大小=大 | c=一般,形狀=圓形) * P(顏色=紅色 | c=一般) * P(形狀=圓形 | c=一般,大小=大)
= 7/12 * 2/4 * 6/8 * 2/5
= 0.0875
因此,測試集上要預測的這個樣本和樸素貝葉斯分類器要預測的結果是相同的,都為一般的果子。
這種依賴屬性選取演算法稱為超父ODE演算法:SPODE。顯然,這個演算法是每個屬性值只與其他唯一 一個有依賴關係。基於它之上,又提出另一種基於整合學習機制,更為強大的獨依賴分類器,AODE,它的演算法思想是怎麼樣的呢?
04
—
AODE演算法
這個演算法思路很簡單,就是在SPODE演算法的基礎上在外面包一個迴圈吧,說的好聽點就是嘗試將每個屬性作為超父屬性來構建SPODE吧,請看下面的公式,是不是在SPODE外面包了一個迴圈,然後求它們的和作為當前預測樣本的得分值啊:
上面的求和符號實質兌換為程式碼不就是一個for迴圈嗎。
05
—
總結和展望
以上介紹了考慮屬性間有依賴關係時的半樸素貝葉斯分類器。結合近幾天的闡述,這些(半)樸素貝葉斯分類器,都有一個共同特點:假設訓練樣本所有屬性變數的值都已被觀測到,訓練樣本是完整的。
然後,現實生活中,有時候拿到的資料集缺少某個屬性的觀測值(這種變數稱為隱變數),在這種存在“未觀測”變數的情形下,是否仍能對模型引數進行估計呢?
比如,兩箱蘋果,其中從A箱中取到一個好蘋果的概率大於從B箱中取得,如果有一堆蘋果來自於A箱和B箱,但是不知道某個蘋果來自於A箱還是B箱,進行了5組實驗,每組抽取10個蘋果,每組抽到的好蘋果和一般蘋果都記錄到紙上,通過這些觀測資料,能得出從A或B箱中取到一個好蘋果的概率嗎?
這個預測,無形中增加了一個隱變數:蘋果出處這屬性吧(取值:A箱或B箱)。在這種情況下,介紹一種常用的估計類似引數隱變數的利器:Expectation-Maximization 演算法(期望最大演算法)。EM演算法正如它的名字那樣每輪迭代經過兩步:E步和M步,迭代,直至收斂。
謝謝您的閱讀!
請記住:每天一小步,日積月累一大步!
交流思想,注重分析,看重過程,包含但不限於:經典演算法,機器學習,深度學習,LeetCode 題解,Kaggle 實戰,英語沙龍,定期邀請專家發推。期待您的到來!