樸素貝葉斯分類算法
- 主要內容
- 貝葉斯定理
- 樸素貝葉斯分類算法詳解
- 樸素貝葉斯分類算法實例講解
- 拉普拉斯平滑
1、貝葉斯定理
貝葉斯定理是關於隨機事件A和B的條件概率(或邊緣概率)的一則定理。已知某條件概率,如何得到兩個事件交換後的概率,也就是在已知P(A|B) 的情況下如何求得P(B|A) 。其中,P(A|B) 是在B發生的情況下A發生的可能性,計算如下:
貝葉斯定理:
2、樸素貝葉斯分類算法詳解
(1)x=(x1,x2,...xD) 表示含有D維屬性的數據對象。訓練集S 含有K 個類別,表示爲y=(y1,y2,...yK) 。
(2)已知待分類數據對象x ,預測x 所屬類別,計算方式如下:
所得
yk 即爲
x 所屬類別。上式表示,已知待分類數據對象
x 的情況下,分別計算
x 屬於
y1、y2、...、yK 的概率,選取其中概率的最大值,此時所對應的
yk ,即爲
x 所屬類別。
(3)根據貝葉斯定理,
P(yk|x) 計算方式如下:
計算過程中,
P(x) 對於
P(yk|x) ,相當於常數。因此,若想得到
P(yk|x) 最大值,只需計算
P(x|yk)P(yk) 最大值。如果類別的先驗概率未知,即
P(yk) 未知,則通常假定這些類別是等概率的,即
P(y1)=P(y2)=...=P(yK) 。
(4)假設數據對象
x 的各屬性之間相互獨立,
P(x|yk) 計算方式如下:
(5)
P(xd|yk) 的計算方式如下:
如果屬性
Ad 是離散屬性或分類屬性。訓練集中屬於類別
yk 的數據對象,在屬性
Ad 下的相異屬性值共有n個;訓練集中屬於類別
yk ,且在屬性
Ad 下的屬性值爲
xd 的數據對象共有m個。因此,
P(xd|yk) 計算方式如下:
如果屬性
Ad 是連續屬性。通常假設連續屬性均服從均值爲
μ 、標準差爲
σ 的高斯分佈, 即
因此,
P(xd|yk) 計算方式如下:
其中,
μyk 、
σyk 表示訓練集中屬於類別
yk 的數據對象在屬性
Ad 下的均值和標準差。
例如,設
x=(35,40000¥) ,其中
A1 、
A2 分別是屬性age、income。設類別屬性爲buys_computer,
x 的類別屬性值爲yes,即buys_computer=yes。針對連續屬性age,假設訓練集
S 中購買計算機的顧客年齡爲
38±12 ,即
μage=38 、
σage=12 。將
xage=35 、
μage=38 、
σage=12 待入至上述高斯函數中,所得結果即爲
P(age=35|buys_computer=yes) 的值。
3、樸素貝葉斯分類算法實例講解
給定訓練數據如表1,使用樸素貝葉斯分類預測未知數據對象的類標號。數據對象用屬性age、income、student、credit_rating描述。類別屬性buys_computer具有兩個不同值,即yes、no。
表1 AllElectronics 顧客數據庫標記類的訓練數據
待分類數據對象
x=(age=youth,income=medium,student=yes,credit_rating=fair) 。
計算
P(yk) :
P(buys_computer=yes)=9/14=0.643
P(buys_computer=no)=5/14=0.357
計算
P(xd|yk) :
P(age=youth|buys_computer=yes)=2/9=0.222
P(age=youth|buys_computer=no)=3/5=0.600
P(income=medium|buys_computer=yes)=4/9=0.444
P(income=medium|buys_computer=no)=2/5=0.400
P(student=yes|buys_computer=yes)=6/9=0.667
P(student=yes|buys_computer=no)=1/5=0.200
P(credit_rating=fair|buys_computer=yes)=6/9=0.667
P(credit_rating=fair|buys_computer=no)=2/5=0.400
計算
P(x|yk) :
P(x|buys_computer=yes)==P(age=youth|buys_computer=yes)×P(income=medium|buys_computer=yes)×P(student=yes|buys_computer=yes)×P(credit_rating=fair|buys_computer=yes)0.222×0.444×0.667×0.667=0.044(1)
同理:
P(x|buys_computer=no)=0.600×0.400×0.200×0.400=0.019
計算
P(x|yk)P(yk) :
P(x|buys_computer=yes)P(buys_computer=yes)=0.044×0.643=0.028
P(x|buys_computer=no)P(buys_computer=no)=0.019×0.357=0.007
由於
0.028>0.007 ,因此,待分類數據對象
x 的類別爲
buys_computer=yes 。
4、拉普拉斯平滑
如果待分類數據對象x=(age=youth,income=medium,student=yes,credit_rating=worse) ,而原始訓練集的屬性credit_rating中沒有worse屬性值,此時P(credit_rating=worse|buys_computer=yes)=0 ,導致P(x|buys_computer=yes)=0 。然而真實情況中,待分類數據對象x 可能有較高的概率屬於buys_computer=yes類別。
如何解決上述問題呢?這裏介紹一種簡單的方法——拉普拉斯平滑處理,思想大致如下:待分類樣本x 的第d 個屬性特徵xd 在類別yk 中出現的概率表示爲P(xd|yk)=mn ,其中針對訓練樣本集合,n 表示類別yk 中數據對象的總個數,m 表示第d 個屬性特徵xd 在類別yk 中出現的次數。假設,拉普拉斯平滑處理參數爲λ 。經過拉普拉斯平滑處理之後,P(xd|yk)=m+λn+Rλ ,其中R 表示類別yk 中樣本第d 個屬性特徵不同取值的個數。相應的,P(yk)=nN ,經過拉普拉斯平滑處理之後,變爲P(yk)=n+λN+Kλ ,其中N 表示訓練樣本總個數,K 表示訓練樣本類別個數。我們不難發現,通過拉普拉斯平滑處理能夠有效避免概率爲零的情況。
例 假定在某個訓練數據集上只有兩種類別,類別buys_computer=no包含500個對象,類別buys_computer=yes包含1000個對象。其中,當buys_computer=yes時,有0個對象income=low,990個對象income=medium,10個對象income=high。不使用拉普拉斯平滑處理,這些事件的概率分別是P(income=low|buys_computer=yes)=0 、P(income=medium|buys_computer=yes)=9901000 、P(income=high|buys_computer=yes)=101000 、P(buys_computer=yes)=10001500 。當使用拉普拉斯平滑處理時,假設拉普拉斯平滑處理參數爲λ=1 ,分別得到如下的概率:
P(income=low|buys_computer=yes)=11003,P(income=medium|buys_computer=yes)=9911003,P(income=high|buys_computer=yes)=111003,P(buys_computer=yes)=10011502
經過拉普拉斯平滑處理之後的概率估計與對應的之前的概率估計很接近,但有效避免了零概率值。