樸素貝葉斯是一模擬較簡單的演算法,scikit-learn中樸素貝葉斯類庫的使用也比較簡單。相對於決策樹,knn之類的演算法,樸素貝葉斯需要關注的引數是比較少的,這樣也比較容易掌握。在scikit-learn中,一共有4個樸素貝葉斯的分類演算法類。我們關注的是gaussiannb,multinomialnb和bernoullinb。三者之間的不同在於他們對p(x|y)的概率估計不一樣。其中gaussiannb就是先驗為高斯分布的樸素貝葉斯,multinomialnb就是先驗為多項式分布的樸素貝葉斯,而bernoullinb就是先驗為伯努利分布的樸素貝葉斯。
三個類適用的分類場景各不相同,一般來說,如果樣本特徵的分布大部分是連續值,使用gaussiannb會比較好。如果如果樣本特徵的分大部分是多元離散值,使用multinomialnb比較合適。而如果樣本特徵是二元離散值或者很稀疏的多元離散值,應該使用bernoullinb。
gaussiannb類的主要引數僅有乙個,即先驗概率priors ,對應y的各個類別的先驗概率p(y
=ck)
p(y=ck)
。這個值預設不給出,如果不給出此時p(y
=ck)
=mk/
mp(y=ck)=mk/m
。其中m為訓練集樣本總數量,mkmk
為輸出為第k類別的訓練集樣本數。如果給出的話就以priors 為準。在使用gaussiannb的fit方法擬合資料後,我們可以進行**。此時**有三種方法,包括predict,predict_log_proba和predict_proba。predict方法就是我們最常用的**方法,直接給出測試集的**類別輸出;predict_proba則不同,它會給出測試集樣本在各個類別上**的概率。容易理解,predict_proba**出的各個類別概率裡的最大值對應的類別,也就是predict方法得到類別。predict_log_proba和predict_proba類似,它會給出測試集樣本在各個類別上**的概率的乙個對數轉化。轉化後predict_log_proba**出的各個類別對數概率裡的最大值對應的類別,也就是predict方法得到類別
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.*****_bayes import gaussiannb
from sklearn.metrics import (brier_score_loss, precision_score, recall_score,
f1_score)
from sklearn.calibration import calibratedclassifiercv, calibration_curve
from sklearn.model_selection import train_test_split
# create dataset of classification task with many redundant and few
# informative features
x, y = datasets.make_classification(n_samples=100000, n_features=20,
n_informative=2, n_redundant=10,
random_state=42)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.99,
random_state=42)
clf = gaussiannb()
clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)
y_pred_proba = clf.predict_proba(x_test)
clf.score(x_test,y_test)
multinomialnb引數比gaussiannb多,但是一共也只有僅僅3個。其中,引數alpha即為上面的常數λλ
,如果你沒有特別的需要,用預設的1即可。如果發現擬合的不好,需要調優時,可以選擇稍大於1或者稍小於1的數。布林引數fit_prior表示是否要考慮先驗概率,如果是false,則所有的樣本類別輸出都有相同的類別先驗概率。否則可以自己用第三個引數class_prior輸入先驗概率,或者不輸入第三個引數class_prior讓multinomialnb自己從訓練集樣本來計算先驗概率,此時的先驗概率為p(
y=ck
)=mk
/mp(y=ck)=mk/m
。其中m為訓練集樣本總數量,mk
mk為輸出為第k類別的訓練集樣本數。
bernoullinb一共有4個引數,其中3個引數的名字和意義和multinomialnb完全相同。唯一增加的乙個引數是binarize。這個引數主要是用來幫bernoullinb處理二項分布的,可以是數值或者不輸入。如果不輸入,則bernoullinb認為每個資料特徵都已經是二元的。否則的話,小於binarize的會歸為一類,大於binarize的會歸為另外一類。
在使用bernoullinb的fit或者partial_fit方法擬合資料後,我們可以進行**。此時**有三種方法,包括predict,predict_log_proba和predict_proba。由於方法和gaussiannb完全一樣,這裡就不累述了。
Scikit Learn學習筆記 樸素貝葉斯
樸素貝葉斯模型是一組非常簡單快速的分類方法啊,通常適用於維度非常高的資料集。因為執行速度快,而且可調引數少,因此非常適合為分類問題提供快速粗糙的基本方案。之所以成為 樸素 或 樸素貝葉斯 是因為如果對每一種標籤的生成模型 用於計算每個標籤的p 特徵 li p 特徵 li 進行非常簡單的假設,就能找到...
樸素貝葉斯
樸素貝葉斯演算法是一種基於概率統計的分類方法,它主要利用貝葉斯公式對樣本事件求概率,通過概率進行分類。以下先對貝葉斯公式做個了解。對於事件a b,若p b 0,則事件a在事件b發生的條件下發生的概率為 p a b p a b p b 將條件概率稍作轉化即可得到貝葉斯公式如下 p a b p b a ...
樸素貝葉斯
1.準備資料 從文字中構建詞向量 2.訓練演算法 從詞向量計算概率 3.測試演算法 儲存為 bayes.py 檔案 參考 coding utf 8 from numpy import 文字轉化為詞向量 def loaddataset postinglist my dog has flea probl...