scikit learn樸素貝葉斯類庫使用小結

2021-08-15 20:18:26 字數 2654 閱讀 9104

樸素貝葉斯是一模擬較簡單的演算法,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...