樸素貝葉斯(NB)
[學生黨學習筆記,如有錯誤謝謝各位大佬指出]
所用書籍:《統計學習方法》-李航
一、概述
??樸素貝葉斯模型首先基于特征條件獨立假設,學習輸入的聯合概率分布;然后基于此模型,對給定的輸入x,利用貝葉斯定理求出后驗概率最大的輸出y,
??同時這也表明了樸素貝葉斯是一種生成式模型,是基于概率進行學習并分類的,
??關于生成式模型與判別式模型,大家可以點鏈接看看這篇文章[戳這里]
??相對于其它分類演算法,樸素貝葉斯分類依賴于貝葉斯概率定理來預測未知資料集的類別,它的速度是非常快的,
??貝葉斯定理實際上就是計算”條件概率”的公式,
條件概率:
P
(
A
∣
B
)
=
P
(
B
∣
A
)
?
P
(
A
)
P
(
B
)
P(A|B)=\frac{P(B|A)*P(A)}{P(B)}
P(A∣B)=P(B)P(B∣A)?P(A)?
在樸素貝葉斯分類器中,上式分別表示:
- P(A|B)是給定預測變數(B,屬性)的類(A,target)的后驗概率,【即在看到新資料后,我們要計算的該假設的概率】
- P(A)是類的先驗概率,【即在得到新資料前某一假設的概率】
- P(B|A)是預測器給定類的概率的可能性,【該假設下得到這一資料的概率,稱為似然度】
- P(B)是預測器的先驗概率,【在任何假設下得到這一資料的概率,稱為標準化常量】
??樸素貝葉斯分類器假設類中特定特征和其它特征的存在無關,因為前提條件便是基于特征獨立的,這也是這個演算法被稱為“樸素”的原因,
二、貝葉斯演算法數學原理
??這部分我建議大家去看李航老師的《統計學習方法》,我覺得寫得很清楚,我這里就不過多贅述(也可能是我懶得打那些復雜的推導公式,我個人習慣在例子中搞明白),
??這里直接上例題(例子來源于上書):
??例:由下表中的訓練資料學習一個NB分類器并確定 x = ( 2 , S ) T x=(2,S)^T x=(2,S)T的類標記y,表中 x ( 1 ) x^{(1)} x(1), x ( 2 ) x^{(2)} x(2)為特征,取值的集合分別為 A 1 A_1 A1?={1,2,3}, A 2 A_2 A2?={S,M,L},Y為類標記,Y ∈ \in ∈C={1,-1}.
| ? | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| x ( 1 ) x^{(1)} x(1) | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 |
| x ( 2 ) x^{(2)} x(2) | S | M | M | S | S | S | M | M | L | L | L | M | M | L | L |
| Y Y Y | -1 | -1 | 1 | 1 | -1 | -1 | -1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | -1 |
??首先我們分析目標變數(Target)Y:
P
(
Y
=
1
)
=
9
15
,
P
(
Y
=
?
1
)
=
6
15
P(Y=1)=\frac{9}{15},P(Y=-1)=\frac{6}{15}
P(Y=1)=159?,P(Y=?1)=156?
??再看各特征的條件概率:
P
(
x
(
1
)
=
1
∣
Y
=
1
)
=
2
9
,
P
(
x
(
1
)
=
2
∣
Y
=
1
)
=
3
9
,
P
(
x
(
1
)
=
3
∣
Y
=
1
)
=
4
9
P(x^{(1)}=1|Y=1)=\frac{2}{9},P(x^{(1)}=2|Y=1)=\frac{3}{9},P(x^{(1)}=3|Y=1)=\frac{4}{9}
P(x(1)=1∣Y=1)=92?,P(x(1)=2∣Y=1)=93?,P(x(1)=3∣Y=1)=94?
P
(
x
(
2
)
=
S
∣
Y
=
1
)
=
1
9
,
P
(
x
(
2
)
=
M
∣
Y
=
1
)
=
4
9
,
P
(
x
(
2
)
=
L
∣
Y
=
1
)
=
4
9
P(x^{(2)}=S|Y=1)=\frac{1}{9},P(x^{(2)}=M|Y=1)=\frac{4}{9},P(x^{(2)}=L|Y=1)=\frac{4}{9}
P(x(2)=S∣Y=1)=91?,P(x(2)=M∣Y=1)=94?,P(x(2)=L∣Y=1)=94?
P
(
x
(
1
)
=
1
∣
Y
=
?
1
)
=
3
6
,
P
(
x
(
1
)
=
2
∣
Y
=
?
1
)
=
2
6
,
P
(
x
(
1
)
=
3
∣
Y
=
?
1
)
=
1
6
P(x^{(1)}=1|Y=-1)=\frac{3}{6},P(x^{(1)}=2|Y=-1)=\frac{2}{6},P(x^{(1)}=3|Y=-1)=\frac{1}{6}
P(x(1)=1∣Y=?1)=63?,P(x(1)=2∣Y=?1)=62?,P(x(1)=3∣Y=?1)=61?
P
(
x
(
2
)
=
S
∣
Y
=
?
1
)
=
3
6
,
P
(
x
(
2
)
=
M
∣
Y
=
?
1
)
=
2
6
,
P
(
x
(
2
)
=
L
∣
Y
=
?
1
)
=
1
6
P(x^{(2)}=S|Y=-1)=\frac{3}{6},P(x^{(2)}=M|Y=-1)=\frac{2}{6},P(x^{(2)}=L|Y=-1)=\frac{1}{6}
P(x(2)=S∣Y=?1)=63?,P(x(2)=M∣Y=?1)=62?,P(x(2)=L∣Y=?1)=61?
??再對于給定的
x
=
(
2
,
S
)
T
x=(2,S)^T
x=(2,S)T:
P
(
Y
=
1
)
P
(
X
(
1
)
=
2
∣
Y
=
1
)
P
(
X
(
2
)
=
S
∣
Y
=
1
)
=
9
15
?
3
9
?
1
9
=
1
45
P(Y=1)P(X^{(1)}=2|Y=1)P(X^{(2)}=S|Y=1)=\frac{9}{15}*\frac{3}{9}*\frac{1}{9}=\frac{1}{45}
P(Y=1)P(X(1)=2∣Y=1)P(X(2)=S∣Y=1)=159??93??91?=451?
P
(
Y
=
?
1
)
P
(
X
(
1
)
=
2
∣
Y
=
?
1
)
P
(
X
(
2
)
=
S
∣
Y
=
?
1
)
=
6
15
?
2
6
?
3
6
=
1
15
P(Y=-1)P(X^{(1)}=2|Y=-1)P(X^{(2)}=S|Y=-1)=\frac{6}{15}*\frac{2}{6}*\frac{3}{6}=\frac{1}{15}
P(Y=?1)P(X(1)=2∣Y=?1)P(X(2)=S∣Y=?1)=156??62??63?=151?
??從這里便可以得出結果,下式概率大于上式,所以預測y=-1,
貝葉斯估計(使用拉普拉斯平滑)
??如果我們要估計的概率值有為0的情況,這時會影響到后驗概率的計算,使模型產生偏差,這時我們便需要進行貝葉斯估計,條件概率的貝葉斯估計式如下:
P
λ
=
Σ
i
=
1
N
I
(
y
i
=
c
k
)
+
λ
N
+
K
λ
P_{\lambda}=\frac{\Sigma_{i=1}^N{I(y_i=c_k)}+\lambda}{N+K\lambda}
Pλ?=N+KλΣi=1N?I(yi?=ck?)+λ?
P
λ
(
X
(
j
)
=
a
j
i
∣
Y
=
c
k
)
=
Σ
i
=
1
N
I
(
x
i
(
j
)
=
a
i
j
,
y
i
=
c
k
)
+
λ
Σ
i
=
1
N
I
(
y
i
=
c
k
)
+
S
i
λ
P_{\lambda}(X^{(j)}=a_{ji}|Y=c_k)=\frac{\Sigma_{i=1}^N{I(x_i^{(j)}=a_{ij},y_i=c_k)}+\lambda}{\Sigma_{i=1}^N{I(y_i=c_k)}+S_i\lambda}
Pλ?(X(j)=aji?∣Y=ck?)=Σi=1N?I(yi?=ck?)+Si?λΣi=1N?I(xi(j)?=aij?,yi?=ck?)+λ?
??則同樣以例題形式,資料同上表,按照拉普拉斯平滑估計概率,即取
λ
=
1
\lambda=1
λ=1,
??公式推導我就不多說了,貝葉斯引數估計的公式其實就是在條件概率公式的分子加一個
λ
\lambda
λ,分母加一個
K
λ
K\lambda
Kλ或
S
i
λ
S_{i}\lambda
Si?λ,其中K為y的種類,
S
i
S_i
Si?為某特征的種類,本題中y=1或-1,所以K=2,
x
(
1
)
x^{(1)}
x(1)有1,2,3這三種,即
S
1
S_1
S1?=3,
??接下來我們來進行計算,同樣先計算目標函式y:
P
(
Y
=
1
)
=
9
+
1
15
+
2
?
1
=
10
17
,
P
(
Y
=
?
1
)
=
6
+
1
15
+
2
?
1
=
7
17
P(Y=1)=\frac{9+1}{15+2*1}=\frac{10}{17},P(Y=-1)=\frac{6+1}{15+2*1}=\frac{7}{17}
P(Y=1)=15+2?19+1?=1710?,P(Y=?1)=15+2?16+1?=177?
??再看各特征的條件概率:
P
(
x
(
1
)
=
1
∣
Y
=
1
)
=
2
+
1
9
+
3
=
3
12
P(x^{(1)}=1|Y=1)=\frac{2+1}{9+3}=\frac{3}{12}
P(x(1)=1∣Y=1)=9+32+1?=123?
??這里分母為什么加3呢,因為這是特征
x
(
1
)
x^{(1)}
x(1)有1,2,3這三種,即
S
1
S_1
S1?=3,同理
x
(
2
)
x^{(2)}
x(2)也有S,M,L三種,因此下面的
S
2
S_2
S2?=3.
??計算結果如下:
P
(
x
(
1
)
=
2
∣
Y
=
1
)
=
4
12
,
P
(
x
(
1
)
=
3
∣
Y
=
1
)
=
5
12
P(x^{(1)}=2|Y=1)=\frac{4}{12},P(x^{(1)}=3|Y=1)=\frac{5}{12}
P(x(1)=2∣Y=1)=124?,P(x(1)=3∣Y=1)=125?
P
(
x
(
2
)
=
S
∣
Y
=
1
)
=
2
12
,
P
(
x
(
2
)
=
M
∣
Y
=
1
)
=
5
12
,
P
(
x
(
2
)
=
L
∣
Y
=
1
)
=
5
12
P(x^{(2)}=S|Y=1)=\frac{2}{12},P(x^{(2)}=M|Y=1)=\frac{5}{12},P(x^{(2)}=L|Y=1)=\frac{5}{12}
P(x(2)=S∣Y=1)=122?,P(x(2)=M∣Y=1)=125?,P(x(2)=L∣Y=1)=125?
P
(
x
(
1
)
=
1
∣
Y
=
?
1
)
=
4
9
,
P
(
x
(
1
)
=
2
∣
Y
=
?
1
)
=
3
9
,
P
(
x
(
1
)
=
3
∣
Y
=
?
1
)
=
2
9
P(x^{(1)}=1|Y=-1)=\frac{4}{9},P(x^{(1)}=2|Y=-1)=\frac{3}{9},P(x^{(1)}=3|Y=-1)=\frac{2}{9}
P(x(1)=1∣Y=?1)=94?,P(x(1)=2∣Y=?1)=93?,P(x(1)=3∣Y=?1)=92?
P
(
x
(
2
)
=
S
∣
Y
=
?
1
)
=
4
9
,
P
(
x
(
2
)
=
M
∣
Y
=
?
1
)
=
3
9
,
P
(
x
(
2
)
=
L
∣
Y
=
?
1
)
=
2
9
P(x^{(2)}=S|Y=-1)=\frac{4}{9},P(x^{(2)}=M|Y=-1)=\frac{3}{9},P(x^{(2)}=L|Y=-1)=\frac{2}{9}
P(x(2)=S∣Y=?1)=94?,P(x(2)=M∣Y=?1)=93?,P(x(2)=L∣Y=?1)=92?
??再對于給定的
x
=
(
2
,
S
)
T
x=(2,S)^T
x=(2,S)T:
P
(
Y
=
1
)
P
(
X
(
1
)
=
2
∣
Y
=
1
)
P
(
X
(
2
)
=
S
∣
Y
=
1
)
=
10
17
?
4
12
?
2
12
=
5
153
=
0.0327
P(Y=1)P(X^{(1)}=2|Y=1)P(X^{(2)}=S|Y=1)=\frac{10}{17}*\frac{4}{12}*\frac{2}{12}=\frac{5}{153}=0.0327
P(Y=1)P(X(1)=2∣Y=1)P(X(2)=S∣Y=1)=1710??124??122?=1535?=0.0327
P
(
Y
=
?
1
)
P
(
X
(
1
)
=
2
∣
Y
=
?
1
)
P
(
X
(
2
)
=
S
∣
Y
=
?
1
)
=
7
17
?
3
9
?
4
9
=
28
459
=
0.0610
P(Y=-1)P(X^{(1)}=2|Y=-1)P(X^{(2)}=S|Y=-1)=\frac{7}{17}*\frac{3}{9}*\frac{4}{9}=\frac{28}{459}=0.0610
P(Y=?1)P(X(1)=2∣Y=?1)P(X(2)=S∣Y=?1)=177??93??94?=45928?=0.0610
因此,預測y=-1,
三、樸素貝葉斯分類器的優缺點
優點:
- 預測測驗資料集的類別是容易且快速的,它在多分類預測中也表現良好,
- 當獨立性假設成立時,樸素貝葉斯分類器與邏輯回歸等其他模型相比表現更好,而且需要更少的訓練資料,
- 與數值變數相比,該模型在分類輸入變數的情況下表現更好,
- 對缺失資料不敏感,所以常用于文本分類,
缺點:
- 如果出現“零概率”時,模型不能進行預測,因此我們需要使用平滑技術,最簡單的平滑技術之一是拉普拉斯評估,
- 另一方面,樸素貝葉斯(Bayes)也被稱為不好的估計器,所以來自predict_proba的概率輸出不應該被過于重視,
- 對訓練資料的依賴性很強,如果訓練資料誤差較大,那么預測出來的效果就會不佳,
- 樸素貝葉斯的另一個局限是獨立預測因子的假設,在現實生活中,我們得到一組完全獨立的預測變數幾乎是不可能的,
注:我們知道樸素貝葉斯模型中的輸入變數都是條件獨立的,這是該模型的基本前提,但如果輸入變數之間存在概率依存關系,那這時模型就變成了貝葉斯網路,
四、樸素貝葉斯演算法的應用
??實時預測:該模型速度很快, 因此,它可以用于實時預測,
??多分類器:由貝葉斯公式可知,這種演算法也是一個多分類器,因此我們可以預測多個目標變數類別的概率,
??文本分類/垃圾郵件過濾/情感分析:該模型被廣泛用于垃圾郵件過濾識別和情感分析,可以用于文本分類,成功率很高,
??推薦系統:樸素貝葉斯分類器和協作過濾一起構建推薦系統,該系統使用機器學習和資料挖掘技術來過濾看不見的資訊并預測用戶是否喜歡給定的資源,
五、樸素貝葉斯的分類
sklearn庫中有三種型別的樸素貝葉斯模型:
??高斯(Gaussian):它用于分類,它假設特征遵循正態分布,意思就是對連續型資料進行處理,
??多項式(Multinomial):用于離散計數,計算資料的條件概率(使用拉普拉斯估計器進行平滑的一個模型),
??伯努利(Bernoulli):取值特征是布爾型,即ture或false,在進行檔案分類時,就是一個單詞有沒有在一個檔案中出現過,
六、樸素貝葉斯的調優
以下是提高Naive Bayes模型功能的一些建議:
- 如果連續性特征不具有正態分布,則應采用變換或不同的方法將其轉換為正態分布,
- 如果測驗資料集具有零頻率問題,則應用平滑技術“拉普拉斯修正”來預測測驗資料集的類別,
- 洗掉相關特征,因為高度相關的特征在模型中被投票兩次,并且可能導致過度膨脹的重要性,
- 樸素貝葉斯是根據訓練集進行分類,分類出來的結果基本上就是確定了的,所以是沒有超引數可以調整的,只能通過alpha = 1來平滑,alpha值并不算超引數;或者使用fit_prior = [True | False]來學習- 類別先驗概率,個人覺得用樸素貝葉斯模型的話要把重點放在資料的預處理和特征選擇上,
- 最后,一些常用的分類器組合技術是沒有效果的,如集合,裝袋和提高,因為它們的目的是減少變化,而樸素貝葉斯沒有任何變化可以最小化,
七、python實作代碼
直接在下一篇博客中,寫之前kaggle競賽的專案,專案中會用到NB,實作的話用sklearn是很簡單的,稍微寫一下核心(沒有前后文,單獨運行肯定是不行的)
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
model = GaussianNB()
# 用訓練資料擬合
model.fit(X_train,y_train)
# 預測
predict_train = model.predict(X_train)
trainaccuracy = accuracy_score(y_train,predict_train)
print('accuracy_score on train dataset : ', trainaccuracy)
用sklearn庫基本上這些機器學習代碼就這么多,我只能說開發sklearn的是神,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/379398.html
標籤:AI
上一篇:R語言plotly可視化:plotly可視化基本散點圖(指定影像型別、模式)、plotly可視化散點圖(為不同分組資料配置不同的色彩)、ggplotly使用plotly包呈現ggplot2的可視化結果
