機器學習之貝葉斯學習
機器學習之貝葉斯學習
一、概述
貝葉斯決策最大的特點就是依賴先驗,通俗來說,就是根據之前的依據,對未來發生的可能性就行判斷。
# Example1
Q:我們想知道懷柔區明天下不下雨?
A:可以根據過去10年來,懷柔區365(或366)天有多少天下雨,有多少天不下雨進行判斷。
總結:要判斷明天、明年等(屬於後驗概念)發生的可能性,需要根據之前的依據進行判斷分析,就是依賴先驗。
二、貝葉斯決策論
1. 什麼是貝葉斯公式?
1)基於概率論的角度
2)基於觀察特徵、類別的貝葉斯公式
2. 最小錯誤率貝葉斯決策
1)樣本錯誤率
2)整體錯誤率
若想得到最小錯誤率,正確率必須達到最大,即
因此,最小錯誤率貝葉斯決策等價於最大後驗概率決策。
3. 最小風險貝葉斯決策
4. 極大似然估計(MLE)
估計類條件概率的一種常用策略是先假定其具有某種確定的概率分佈形式,在基於訓練樣本對概率分佈的引數進行估計。
事實上,概率模型的訓練過程就是引數估計的過程。
1)假設這些樣本獨立分佈
2)當這些樣本為連續屬性時
三、貝葉斯分類器
1. 樸素貝葉斯分類器基本知識
前提條件:對已知類別,假設所有屬性相互獨立
4)樸素貝葉斯的優缺點
- 優點:學習和預測的效率高,且易j於實現。當訓練資料較少時,也可以通過極大似然估計估計出必要的的引數。
- 缺點:分類效果不一定很高。特徵獨立性使得樸素貝葉斯變得簡單,但是會犧牲一定的分類準確率。
2. 三種常見的模型
1)高斯模型
當要處理的為連續資料時(如人的身高、物體長度等),我們都可以將其轉化成離散型的值。比如身高160cm以下,特徵值為1;身高160cm-180cm之間,特徵值為2;身高180cm+,特徵值為3。不過這些方式得出的值都不夠細膩,使用樸素貝葉斯分類器中的高斯模型可以解決連續型數值問題。高斯模型假設每一維特徵都服從高斯分佈,即正態分佈。
# Experiment 1 下面將用sklearn函式庫中的Iris資料集進行實驗
實驗結果:
由上述結果來看,預測結果準確。
2)多項式模型
當特徵是離散的時候,常使用樸素貝葉斯中的多項式模型。從樸素貝葉斯基礎知識來看,當訓練集不足時,可能導致先驗概率和條件概率為0,因此會進行平滑處理。多項式模型公式為:
# Experiment 2 下面將用sklearn函式庫進行實驗
實驗結果:
由上述結果來看,預測結果準確
3)伯努利模型
與多項式模型一樣,伯努利模型只允許使用離散的特徵。但是,伯努利模型每個特徵的取值是布林型:True or False,或者0和1。在伯努利模型中,條件概率的計算公式:
# Experiment 3 下面用sklearn函式庫進行實驗
實驗結果:
由上述結果來看,預測結果準確
2. 貝葉斯分類器的實際應用
1)文字分類
前提是假設各文字之間相互獨立,不考慮上下文、語境分析等。
- 在多項式模型中
- 在伯努利模型中
# Example 2 垃圾郵件內容識別
Q:假設我們有垃圾郵件和正常內容郵件各1萬封,如何判斷以下這封郵件是否是垃圾郵件?
郵件內容:“我司可辦理正規發票(保真)17%增值稅發票點數優惠!”
A:
1. 我們選擇使用樸素貝葉斯分類器。
目標就是判斷p(“垃圾郵件”|“某特徵”)是否大於1/2。用Example2來看,就是判斷p(“垃圾郵件”|“我司可辦理正規發票(保真)17%增值稅發票點數優惠!”)是否大於1/2。
然而,大多數垃圾郵件都不會出現完全相同的句子,如果加一些標點,修改文字或數字等,算出來的概率會失真,就不能檢測出該內容是否屬於垃圾郵件。
2. NLP的最重要技術之一— 分詞
句子的可能性是無限的,但是屬於垃圾郵件的詞語卻是有限的!
運用現在較好的中文分詞工具---結巴分詞
將郵件內容拆分成以下單詞:“我”,“司”,“可”,“辦理”,“正規”,“發票”,“保真”,“增值稅”,“發票”,“點數”,“優惠”
因此,公式變為
- p(“垃圾郵件”|(“我”,“司”,“可”,“辦理”,“正規”,“發票”,“保真”,“增值稅”,“發票”,“點數”,“優惠”))
=p((“我”,“司”,“可”,“辦理”,“正規”,“發票”,“保真”,“增值稅”,“發票”,“點數”,“優惠”)| “垃圾郵件”)*P(“垃圾郵件”)
/P((“我”,“司”,“可”,“辦理”,“正規”,“發票”,“保真”,“增值稅”,“發票”,“點數”,“優惠”))
- p(“正常郵件”|(“我”,“司”,“可”,“辦理”,“正規”,“發票”,“保真”,“增值稅”,“發票”,“點數”,“優惠”))
=p((“我”,“司”,“可”,“辦理”,“正規”,“發票”,“保真”,“增值稅”,“發票”,“點數”,“優惠”)| “正常郵件”)*P(“正常郵件”)
/P((“我”,“司”,“可”,“辦理”,“正規”,“發票”,“保真”,“增值稅”,“發票”,“點數”,“優惠”))
3. 應用樸素貝葉斯分類器
樸素貝葉斯的前提是假設各屬性獨立分佈,令S表示“垃圾郵件”,“H”表示“正常郵件”。
p((“我”,“司”,“可”,“辦理”,“正規”,“發票”,“保真”,“增值稅”,“發票”,“點數”,“優惠”)| S)
= p(“我”|S) * p(“司”|S) * p(“可”|S) * p(“辦理”|S) * p(“正規”|S) * p(“發票”|S) * p(“保真”|S) * p(“增值稅”|S) * p(“發票”|S) * p(“點數”|S) * p(“優惠”|S)
p((“我”,“司”,“可”,“辦理”,“正規”,“發票”,“保真”,“增值稅”,“發票”,“點數”,“優惠”)| H)
= p(“我”|H) * p(“司”|H) * p(“可”|H) * p(“辦理”|H) * p(“正規”|H) * p(“發票”|H) * p(“保真”|H) * p(“增值稅”|H) * p(“發票”|H) * p(“點數”|H) * p(“優惠”|H)
因此,我們只需比較
C1 = p(“我”|S) * p(“司”|S) * p(“可”|S) * p(“辦理”|S) * p(“正規”|S) * p(“發票”|S) * p(“保真”|S) * p(“增值稅”|S) * p(“發票”|S) * p(“點數”|S) * p(“優惠”|S) * p(S)
C2 = p(“我”|H) * p(“司”|H) * p(“可”|H) * p(“辦理”|H) * p(“正規”|H) * p(“發票”|H) * p(“保真”|H) * p(“增值稅”|H) * p(“發票”|H) * p(“點數”|H) * p(“優惠”|H) * p(H)
要計算C1和C2,只需統計每個詞在垃圾郵件/正常郵件中出現的概率即可。當樣本數量足夠時,算出來的概率還是很高的,基本可以實現垃圾郵件的識別分類。
4. 多項式模型和伯努利模型
仔細看C1式,p(“發票”|S)出現了兩次,由1.2.2總結的多項式模型知識,可知,C1計算出來的是多項式模型下的概率。
另一種簡化的方法是採用伯努利模型,即將重複出現的詞語視為只出現了1次。因為它丟失了部分詞頻,所以效果會比使用多項式模型略差一些。
在計算時,同樣遵循平滑處理的原則,避免出現失真現象。
四、總結
- 貝葉斯學習主要是基於貝葉斯公式進行變換、學習。
- 貝葉斯學習中一個著名的分類器---樸素貝葉斯分類器。樸素貝葉斯分類器有一個前提條件,就是假設所有屬性相互獨立。
- 樸素貝葉斯中有3個著名模型,分別是高斯模型、多項式模型和伯努利模型。高斯模型允許特徵為連續值,多項式模型和伯努利模型只允許離散型特徵。
- 貝葉斯學習是基於統計方法的,在自然語言處理中對於文字分類等具有很好的效果,但是,樸素貝葉斯分類器不考慮詞語之間的順序關係,如:“武松打死了老虎”和“老虎打死了武松”,運用樸素貝葉斯分類器來計算是無區別的,使用N-Gram等模型可以提高文字分類的準確率。
五、參考資料
[1]《貝葉斯機器學習前沿進展綜述》
[2] 《機器學習》--- 周志華
[3] 貝葉斯理論及3種常見模型https://blog.csdn.net/u012162613/article/details/48323777
- 程式碼,包括常見的其他演算法https://github.com/wepe/MachineLearning
[4] Bayes Methods for Hackershttps://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers
[5] Naive Bayes Spam Filteringhttps://en.wikipedia.org/wiki/Naive_Bayes_spam_filtering