本文作者:王 歌
文字編輯:孫曉玲
通過前面的介紹我們知道,KNN和決策樹這兩種算法雖然簡單易懂,這兩種算法在數據量較大時複雜度很高,一般只用在數據量較小的情況下,這樣數據可以放入內存中運行。不過今天我們介紹的樸素貝葉斯分類器通過獨立假設簡化了概率的計算,節省了內存,可以很好地用於數據量大的情況。下面我們首先來了解這一算法的數理背景——貝葉斯定理。這一算法是由我們在概率論中學到的貝葉斯定理延伸出來的。我們知道貝葉斯公式為:其中,為先驗概率,為後驗概率。而樸素貝葉斯就是要在先驗概率的基礎上將每個樣本都歸入後驗概率最大的那一類中,由於P(A|B)難以從有限的訓練樣本中估計得到,因此採用了條件獨立性假設——每個屬性獨立的對分類結果產生影響,這也是樸素貝葉斯中「樸素」二字的含義,它構成了這一分類的前提。要使後驗概率最大,由於屬性和類別數都是不變的,因此只要使上式的分母最大,即:這就是樸素貝葉斯的推導式,對於不同的先驗條件可以計算得到不同的模型,然後就可以利用得到的模型進行預測。
from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.naive_bayes import GaussianNBfrom sklearn.metrics import accuracy_score
iris_sample = load_iris()x_train, x_test, y_train, y_test = train_test_split(iris_sample.data, iris_sample.target, test_size=0.25, random_state=123)nbclf = GaussianNB()nbclf.fit(x_train, y_train)y_test_pre = nbclf.predict(x_test)score = accuracy_score(y_test, y_test_pre) print('測試集預測結果為:', y_test_pre)print('測試集正確結果為:', y_test)print('測試集準確度為:', score)分類結果及準確率如圖:
在sklearn.naive中提供了三個分類器,分別為GaussianNB()、MultinomialNB()和ComplementNB()。我們來分別看看這三個類的參數。GaussianNB假設特徵的先驗概率為正態分布,主要參數只有一個先驗概率priors並默認不給出。該類有三種預測方法,最常用的predict方法直接給出測試集的預測類別,predict_proba給出測試集樣本在各個類別上預測的概率,predict_log_proba則會給出predict_proba的一個對數轉化。此外它還有一個partial_fit方法,如果訓練集數據量非常大,不能一次全部載入內存,使用這個方法可以把訓練集分成若干等分,重複調用partial_fit來一步步地學習訓練集。但與前面的算法類不同,naive中的類都沒有計算準確率的方法。MultinomialNB假設特徵的先驗概率為多項式分布,即:這個類中有三個參數,參數alpha即為上式中的α,默認取1,此時也稱為拉普拉斯平滑;fit_prior表示是否要考慮先驗概率,默認為True,當選擇False時所有的樣本類別輸出都有相同的類別先驗概率;class_prior用來輸入先驗概率,默認為None。該類所具有的預測方法與GaussianNB相同。
(3)BernoulliNB
BernoulliNB假設特徵的先驗概率為伯努利二項分布,它一共有4個參數,其中3個參數和MultinomialNB完全相同,剩下的那個參數binarize,當不傳入取值時則將每個特徵都看作二元,當傳入數值時將小於binarize的歸為一類,大於binarize歸為另一類。此類的預測方法也與前兩種一致。
如果樣本特徵大部分是連續值,一般會使用GaussianNB;如果樣本特徵大部分是多元離散值,則會使用MultinomialNB;而如果樣本特徵是二元離散值或者很稀疏的多元離散值,應該使用BernoulliNB。
以上就是我們對樸素貝葉斯分類器的介紹。
對我們的推文累計打賞超過1000元,我們即可給您開具發票,發票類別為「諮詢費」。用心做事,不負您的支持!爬取東方財富網當日股票交易情況
stata調用python爬取時間數據——借他山之石以攻玉
Stata有問必答環節
從流調數據中尋找感染真相
熟悉又陌生的reshape
NBA球員薪資分析——基於隨機森林算法(一)
高亮輸出之唐詩作者
微信公眾號「Stata and Python數據分析」分享實用的stata、python等軟體的數據處理知識,歡迎轉載、打賞。我們是由李春濤教授領導下的研究生及本科生組成的大數據處理和分析團隊。
此外,歡迎大家踴躍投稿,介紹一些關於stata和python的數據處理和分析技巧。投稿郵箱:statatraining@163.com投稿要求:
1)必須原創,禁止抄襲;
2)必須準確,詳細,有例子,有截圖;
注意事項:
1)所有投稿都會經過本公眾號運營團隊成員的審核,審核通過才可錄用,一經錄用,會在該推文裡為作者署名,並有賞金分成。
2)郵件請註明投稿,郵件名稱為「投稿+推文名稱」。
3)應廣大讀者要求,現開通有償問答服務,如果大家遇到有關數據處理、分析等問題,可以在公眾號中提出,只需支付少量賞金,我們會在後期的推文裡給予解答。
Long-press QR code to transfer me a reward
As required by Apple's new policy, the Reward feature has been disabled on Weixin for iOS. You can still reward an Official Account by transferring money via QR code.