樸素貝葉斯算法原理
樸素貝葉斯分類器(Naive Bayes Classifier)的優點是運算時間短、數學原理清晰,我在MNIST和CIFAR-10數據集上測試,錯誤率分別爲15.74%和58.45%。
實在看不懂,不如先復(yu)習一下概率統計;如果覺得是我寫的太爛,周志華教授的《機器學習》書中,樸素貝葉斯分類器寫的很清楚。
樸素貝葉斯算法
定義x 爲樣本,ω 爲標記,則將樣本和標記用概率公式表示:
- P(ω) 爲先驗概率,代表ω 在所有標記中出現的概率。
- P(x|ω) 爲似然,代表在ω 標記下,出現樣本x 的概率。
- P(ω|x) 爲後驗概率,代表x 出現的情況下,樣本標記爲ω 的概率。
- P(x) 代表樣本x 出現的概率。
訓練樣本
根據Bayes公式,後驗概率可以由先驗概率和似然表示:
P(ω|x)=P(ω)P(x|ω)P(x)
在分類問題中,我們認爲
P(x) 爲常數,
P(ω) 和
P(x|ω) 可由訓練樣本計算得到,
P(ω|x) 即爲所求的結果(在證據
x 出現的前提下,取得標記爲
ω 的概率)。上式可以表示爲:
P(ω|x)∝P(ω)P(x|ω)
在分類時,我們通過上式計算不同
ω 值所對應的
P(ω)P(x|ω) ,找到最大值對應的
ω ,即可完成分類。因此,我們將分類問題轉化成了根據樣本,計算先驗概率
P(ω) 和似然
P(x|ω) 的問題。
先驗概率P(ω) 可以用樣本中標記爲ω 的數量佔總樣本數之比表示:
P(ω)=DωD
但是,根據樣本,我們無法直接計算似然
P(x|ω) 。在樸素貝葉斯分類算法中,我們假設樣本的每個維度之間相互獨立,此時似然就可以計算了。
對於離散的樣本空間,第i 個維度的似然可以表示爲:
P(xi|ω)=Dω,iDω
考慮到部分樣本取值可能沒有在全部樣本中出現,按上式計算時,沒有出現的項就會取值爲0。爲了解決此問題,
P(ω) 和
P(xi|ω) 的表達式被修正爲
P(ω)=Dω+1D+NP(xi|ω)=Dω,i+1Dω+Ni
N 爲標記
ω 可能取值的總數,
Ni 爲樣本
x 可能取值的總數。
若樣本連續,且假設樣本滿足高斯分佈,似然可表示爲
p(xi|ω)=12π−−√σω,iexp⎛⎝−(xi−μω,i)22σ2ω,i⎞⎠
高斯分佈的係數
σ 和
μ 可以由最大似然估計(Maximum Likelihood Estimation,
MLE)得到:
μ^=1N∑j=0Nxj=x¯
σ^2=1N∑j=0N(xj−x¯)2
對於全部維度的似然P(x|ω) ,
P(x|ω)=∏i=1NP(xi|ω)
至此,我們即可根據給定的樣本空間,計算先驗概率
P(ω) 和似然
P(x|ω) 。
分類
在分類時,因爲先驗概率P(ω) 和似然P(x|ω) 已知,待分類數據x 已知,P(ω)P(x|ω) 可以方便地求得。
又因爲
P(ω|x)∝P(ω)P(x|ω)=P(ω)∏i=1NP(xi|ω)
找出使
P(ω|x) 最大的
ωi ,
ωi 即爲分類結果。
需要注意的是,在實際應用中,樣本x 的維數通常很高,而概率值均小於1。因此,爲避免浮點數連乘出現0,將上式兩邊取對數
logP(ω|x)∝logP(ω)+∑i=1NlogP(xi|ω)
對每個
ωi 計算
logP(ωi)+∑Ni=1logP(xi|ωi) ,使該式最大的
ωi 即爲分類結果。
版本信息
1.0 20171118 initial commit
本作品採用知識共享署名-相同方式共享 3.0 未本地化版本許可協議進行許可。