樸素貝葉斯方法是一組基于貝葉斯定理的有監(jiān)督學習算法,在給定類變量值的情況下,假設每一對特征之間的條件獨立性為“樸素”假設。貝葉斯定理給出了類變量和相關特征向量到之間的關系式:
使用樸素的條件獨立性假設:
對所有的, 這個關系可以被簡化成:
由于是輸入的常量,我們可以使用以下分類規(guī)則:
我們可以用最大后驗(MAP)估計來估計和,前者是訓練集中類的相對頻率。
不同的樸素貝葉斯分類器主要根據(jù)它們對的分布所作的假設而不同。
盡管他們的假設顯然過于簡單化,但是樸素貝葉斯分類器在許多現(xiàn)實世界的情況下已經(jīng)工作地相當好,最出名的就是文檔分類和垃圾郵件過濾。它們需要少量的訓練數(shù)據(jù)來估計必要的參數(shù)。(為什么樸素貝葉斯工作良好,以及它適用于哪些數(shù)據(jù),請參見下面的引用。)
與更復雜的方法相比,樸素貝葉斯學習器和分類器可以非???。類條件特征分布的解耦意味著每個分布可以獨立地估計為一維分布。這反過來又有助于緩解因維度詛咒而產(chǎn)生的問題。
另一方面,雖然樸素貝葉斯被認為是一種很好的分類器,但它是一種糟糕的估計器,因此來自于predict_proba
的概率輸出不應受到太大的重視。
參考
H. Zhang (2004). The optimality of Naive Bayes. Proc. FLAIRS.
GaussianNB
實現(xiàn)了高斯樸素貝葉斯分類算法。假設特征的可能性是高斯分布的:
用極大似然估計參數(shù)和。
>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.naive_bayes import GaussianNB
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
>>> gnb = GaussianNB()
>>> y_pred = gnb.fit(X_train, y_train).predict(X_test)
>>> print("Number of mislabeled points out of a total %d points : %d"
... % (X_test.shape[0], (y_test != y_pred).sum()))
Number of mislabeled points out of a total 75 points : 4
MultinomialNB
實現(xiàn)了多項式樸素貝葉斯,是文本分類中使用的兩個經(jīng)典樸素貝葉斯變體之一(其中數(shù)據(jù)通常表示為詞向量,盡管在實際中 tf-idf向量也是很好的)。分布由每個類的向量參數(shù)化, 其中n是特征數(shù)(在文本分類中,詞匯表的大小),是特征出現(xiàn)在屬于y類的樣本中的概率。
參數(shù)是用平滑的最大似然(即相對頻率計數(shù))估計的:
其中,是訓練集中類樣本中特征出現(xiàn)的次數(shù),是類所有特征的總數(shù)。
平滑先驗為在學習樣本中沒有出現(xiàn)的特征而設計,防止了進一步計算中的零概率。設置稱為拉普拉斯平滑,而稱為Lidstone平滑。
ComplementNB
實現(xiàn)了補充樸素貝葉斯(CNB)算法。CNB是標準多項式樸素貝葉斯(MNB)算法的一種自適應算法,特別適用于不平衡的數(shù)據(jù)集。具體而言,CNB使用來自每個類的補充的統(tǒng)計數(shù)據(jù)來計算模型的權重。CNB的發(fā)明者經(jīng)驗性地表明,CNB的參數(shù)估計比MNB的參數(shù)估計更穩(wěn)定。此外,CNB在文本分類任務方面經(jīng)常優(yōu)于MNB(通常以相當大的幅度)。計算權重的程序如下:
其中對不在類中的所有記錄求和, 要么是記錄中的的計數(shù), 要么是tf-idf形式的值, 就像MNB中的一個光滑的超參數(shù), 同時 。
第二個歸一化解決了較長記錄在MNB中支配參數(shù)估計的趨勢。分類規(guī)則是:
也就是說, 記錄被分配給最糟糕的匹配度的類。
參考
Rennie, J. D., Shih, L., Teevan, J., & Karger, D. R. (2003). Tackling the poor assumptions of naive bayes text classifiers. In ICML (Vol. 3, pp. 616-623).
BernoulliNB
實現(xiàn)了按多元伯努利分布的數(shù)據(jù)的樸素貝葉斯訓練和分類算法,即可能有多個特征,但每個特征都被假定為一個二元值(Bernoulli,boole)變量。因此,該類要求樣本被表示為二值化的特征向量;如果傳遞任何其他類型的數(shù)據(jù),BernoulliNB
實例可能會對其輸入進行二值化(取決于binarize
參數(shù))。
伯努利樸素貝葉斯的決策規(guī)則基于:
它不同于多項式樸素貝葉斯的規(guī)則,因為它明確地懲罰一個特征的不出現(xiàn),它是類的指示,而多項式樸素貝葉斯會簡單地忽略一個未出現(xiàn)的特征。
在文本分類的情況下,可以使用單詞出現(xiàn)向量(而不是單詞統(tǒng)計向量)來訓練和使用該分類器。BernoulliNB
可能在一些數(shù)據(jù)集上表現(xiàn)更好,特別是那些文檔較短的數(shù)據(jù)集。如果時間允許,最好對這兩種模式都進行評估。
參考
C.D. Manning, P. Raghavan and H. Schütze (2008). Introduction to Information Retrieval. Cambridge University Press, pp. 234-265.
A. McCallum and K. Nigam (1998). A comparison of event models for Naive Bayes text classification. Proc. AAAI/ICML-98 Workshop on Learning for Text Categorization, pp. 41-48.
V. Metsis, I. Androutsopoulos and G. Paliouras (2006). Spam filtering with Naive Bayes – Which Naive Bayes? 3rd Conf. on Email and Anti-Spam (CEAS).
CategoricalNB
對分類分布的數(shù)據(jù)實現(xiàn)了類別樸素貝葉斯算法。它假設由索引描述的每個特征都有自己的分類分布。它假設由索引描述的每個特征都有自己的絕對分布。
對于訓練集中的每一個特征, CategoricalNB
估計在類中的每個特征的分類分布,樣本的索引集定義為,m為樣本數(shù)。
給定類的特征中類的概率估計為:
其中是樣本中出現(xiàn)類的次數(shù), 這些樣本屬于類別,屬于類的樣本數(shù),是平滑參數(shù),是特征的可用類別數(shù)。
CategoricalNB
假設樣本矩陣是編碼的(例如,在OrdinalEncoder
的幫助下),這樣每個特征的所有類別都用數(shù)字表示,其中是特征的可用類別數(shù)。
樸素貝葉斯模型可以解決整個訓練集不能導入內(nèi)存的大規(guī)模分類問題。為了處理這種情況, MultinomialNB
, BernoulliNB
, andGaussianNB
公開了一個可以像其他分類器一樣遞增地使用的partial_fit
方法, 這可以在文本文檔的核外分類中被證實。所有樸素貝葉斯分類器都支持樣本加權。
與fit
方法相反, partial_fit
的需要傳遞的第一個是所有預期類標簽的列表。
有關scikit-learn中可用策略的概述,請參見文本文檔的核外分類文檔。
注意:樸素貝葉斯模型的
partial_fit
方法調(diào)用引入了一些計算開銷。建議使用盡可能大的數(shù)據(jù)塊,即到RAM允許的大小。
更多建議: