[nlp] scikit-learn 樸素貝葉斯類庫概述——GaussianNB,MultinomialNB,BernoulliNB

參考:https://www.cnblogs.com/pinard/p/6074222.html

1.scikit-learn 樸素貝葉斯類庫概述

scikit-learn中,一共有3個樸素貝葉斯的分類算法類。分別是GaussianNB,MultinomialNB和BernoulliNB。其中GaussianNB就是先驗爲高斯分佈的樸素貝葉斯,MultinomialNB就是先驗爲多項式分佈的樸素貝葉斯,而BernoulliNB就是先驗爲伯努利分佈的樸素貝葉斯。

這三個類適用的分類場景各不相同,
一般來說,如果樣本特徵的分佈大部分是連續值,使用GaussianNB會比較好。
如果如果樣本特徵的分大部分是多元離散值,使用MultinomialNB比較合適。
如果樣本特徵是二元離散值或者很稀疏的多元離散值,應該使用BernoulliNB

2. GaussianNB類使用總結

GaussianNB假設特徵的先驗概率爲正態分佈,即如下式:
在這裏插入圖片描述
  在使用GaussianNB的fit方法擬合數據後,我們可以進行預測。此時預測有三種方法,包括predict,predict_log_proba和predict_proba。
    
1. predict : 方法就是我們最常用的預測方法,直接給出測試集的預測類別輸出。

2. predict_proba : 則不同,它會給出測試集樣本在各個類別上預測的概率。容易理解,predict_proba預測出的各個類別概率裏的最大值對應的類別,也就是predict方法得到類別。

3. predict_log_proba: 和predict_proba 類似,它會給出測試集樣本在各個類別上預測的概率的一個對數轉化。轉化後predict_log_proba預測出的各個類別對數概率裏的最大值對應的類別,也就是predict方法得到類別。

import numpy as np
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
Y = np.array([1, 1, 1, 2, 2, 2])
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
#擬合數據
clf.fit(X, Y)
print "==Predict result by predict=="
print(clf.predict([[-0.8, -1]]))
print "==Predict result by predict_proba=="
print(clf.predict_proba([[-0.8, -1]]))
print "==Predict result by predict_log_proba=="
print(clf.predict_log_proba([[-0.8, -1]]))

結果

==Predict result by predict==
[1]
==Predict result by predict_proba==
[[  9.99999949e-01   5.05653254e-08]]
==Predict result by predict_log_proba==
[[ -5.05653266e-08  -1.67999998e+01]]

從上面的結果可以看出,測試樣本[-0.8,-1]的類別預測爲類別1。具體的測試樣本[-0.8,-1]被預測爲1的概率爲9.99999949e-01 ,遠遠大於預測爲2的概率5.05653254e-08。這也是爲什麼最終的預測結果爲1的原因了。

3. MultinomialNB類使用總結

MultinomialNB假設特徵的先驗概率爲多項式分佈,即如下式:在這裏插入圖片描述
  第 k 個類別第 j 維特徵第 l 個個取值條件概率。** mk 是訓練集中輸出爲第k類的樣本個數**。
   λ 爲一個大於0的常數,常常取爲1,即拉普拉斯平滑。也可以取其他值。
   3個參數。
   λ可以默認爲1。如果發現擬合的不好,調參可以在1左右搖擺。
   布爾參數 fit_prior 表示是否要考慮 先驗概率,如果是false , 則考慮所有類別都有相同的先驗概率
   先驗概率參數 class_prior 輸入先驗概率,或者不輸入,讓MultinomialNB 自己從訓練集樣本來計算先驗概率,此時的先驗概率爲P(Y=Ck)=mk/m。其中m訓練集樣本總數量mk爲輸出爲第k類別訓練集樣本數。總結如下:
在這裏插入圖片描述
在使用MultinomialNB的fit方法或者partial_fit方法擬合數據後,我們可以進行預測。此時預測有三種方法,包括predictpredict_log_probapredict_proba。由於方法和GaussianNB完全一樣,這裏就不累述了。

4.BernoulliNB類使用總結

BernoulliNB假設特徵的先驗概率爲二元伯努利分佈,即如下式:
在這裏插入圖片描述
此時 l 只有兩種取值。xjl 只能取值0或者1。

BernoulliNB一共有4個參數,
其中3個參數的名字和意義和MultinomialNB完全相同。
唯一增加的一個參數binarize。這個參數主要是用來幫BernoulliNB 處理二項分佈 的,可以是數值或者不輸入
如果不輸入,則BernoulliNB認爲每個數據特徵都已經是二元的
否則的話,小於binarize的會歸爲一類大於binarize的會歸爲另外一類

預測: 在使用 BernoulliNB 的 fit 或者 partial_fit 方法擬合數據後,我們可以進行預測。此時預測有三種方法,包括predictpredict_log_probapredict_proba。由於方法和GaussianNB完全一樣,這裏就不累述了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章