1.9 樸素貝葉斯?
樸素貝葉斯方法是一組基于貝葉斯定理的有監督學習算法,在給定類變量值的情況下,假設每一對特征之間的條件獨立性為“樸素”假設。貝葉斯定理給出了類變量和相關特征向量到之間的關系式:
使用樸素的條件獨立性假設:
對所有的, 這個關系可以被簡化成:
由于是輸入的常量,我們可以使用以下分類規則:
我們可以用最大后驗(MAP)估計來估計和,前者是訓練集中類的相對頻率。
不同的樸素貝葉斯分類器主要根據它們對的分布所作的假設而不同。
盡管他們的假設顯然過于簡單化,但是樸素貝葉斯分類器在許多現實世界的情況下已經工作地相當好,最出名的就是文檔分類和垃圾郵件過濾。它們需要少量的訓練數據來估計必要的參數。(為什么樸素貝葉斯工作良好,以及它適用于哪些數據,請參見下面的引用。)
與更復雜的方法相比,樸素貝葉斯學習器和分類器可以非常快。類條件特征分布的解耦意味著每個分布可以獨立地估計為一維分布。這反過來又有助于緩解因維度詛咒而產生的問題。
另一方面,雖然樸素貝葉斯被認為是一種很好的分類器,但它是一種糟糕的估計器,因此來自于predict_proba
的概率輸出不應受到太大的重視。
參考
H. Zhang (2004). The optimality of Naive Bayes. Proc. FLAIRS.
1.9.1 高斯樸素貝葉斯
GaussianNB
實現了高斯樸素貝葉斯分類算法。假設特征的可能性是高斯分布的:
用極大似然估計參數和。
>>> 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
1.9.2 多項式樸素貝葉斯
MultinomialNB
實現了多項式樸素貝葉斯,是文本分類中使用的兩個經典樸素貝葉斯變體之一(其中數據通常表示為詞向量,盡管在實際中 tf-idf向量也是很好的)。分布由每個類的向量參數化, 其中n是特征數(在文本分類中,詞匯表的大小),是特征出現在屬于y類的樣本中的概率。
參數是用平滑的最大似然(即相對頻率計數)估計的:
其中,是訓練集中類樣本中特征出現的次數,是類所有特征的總數。
平滑先驗為在學習樣本中沒有出現的特征而設計,防止了進一步計算中的零概率。設置稱為拉普拉斯平滑,而稱為Lidstone平滑。
1.9.3 補充樸素貝葉斯
ComplementNB
實現了補充樸素貝葉斯(CNB)算法。CNB是標準多項式樸素貝葉斯(MNB)算法的一種自適應算法,特別適用于不平衡的數據集。具體而言,CNB使用來自每個類的補充的統計數據來計算模型的權重。CNB的發明者經驗性地表明,CNB的參數估計比MNB的參數估計更穩定。此外,CNB在文本分類任務方面經常優于MNB(通常以相當大的幅度)。計算權重的程序如下:
其中對不在類中的所有記錄求和, 要么是記錄中的的計數, 要么是tf-idf形式的值, 就像MNB中的一個光滑的超參數, 同時 。
第二個歸一化解決了較長記錄在MNB中支配參數估計的趨勢。分類規則是:
也就是說, 記錄被分配給最糟糕的匹配度的類。
參考
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).
1.9.4 伯努利樸素貝葉斯
BernoulliNB
實現了按多元伯努利分布的數據的樸素貝葉斯訓練和分類算法,即可能有多個特征,但每個特征都被假定為一個二元值(Bernoulli,boole)變量。因此,該類要求樣本被表示為二值化的特征向量;如果傳遞任何其他類型的數據,BernoulliNB
實例可能會對其輸入進行二值化(取決于binarize
參數)。
伯努利樸素貝葉斯的決策規則基于:
它不同于多項式樸素貝葉斯的規則,因為它明確地懲罰一個特征的不出現,它是類的指示,而多項式樸素貝葉斯會簡單地忽略一個未出現的特征。
在文本分類的情況下,可以使用單詞出現向量(而不是單詞統計向量)來訓練和使用該分類器。BernoulliNB
可能在一些數據集上表現更好,特別是那些文檔較短的數據集。如果時間允許,最好對這兩種模式都進行評估。
參考
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).
1.9.5 類別樸素貝葉斯
CategoricalNB
對分類分布的數據實現了類別樸素貝葉斯算法。它假設由索引描述的每個特征都有自己的分類分布。它假設由索引描述的每個特征都有自己的絕對分布。
對于訓練集中的每一個特征, CategoricalNB
估計在類中的每個特征的分類分布,樣本的索引集定義為,m為樣本數。
給定類的特征中類的概率估計為:
其中是樣本中出現類的次數, 這些樣本屬于類別,屬于類的樣本數,是平滑參數,是特征的可用類別數。
CategoricalNB
假設樣本矩陣是編碼的(例如,在OrdinalEncoder
的幫助下),這樣每個特征的所有類別都用數字表示,其中是特征的可用類別數。
1.9.6 外核樸素貝葉斯模型擬合
樸素貝葉斯模型可以解決整個訓練集不能導入內存的大規模分類問題。為了處理這種情況, MultinomialNB
, BernoulliNB
, andGaussianNB
公開了一個可以像其他分類器一樣遞增地使用的partial_fit
方法, 這可以在文本文檔的核外分類中被證實。所有樸素貝葉斯分類器都支持樣本加權。
與fit
方法相反, partial_fit
的需要傳遞的第一個是所有預期類標簽的列表。
有關scikit-learn中可用策略的概述,請參見文本文檔的核外分類文檔。
注意:樸素貝葉斯模型的
partial_fit
方法調用引入了一些計算開銷。建議使用盡可能大的數據塊,即到RAM允許的大小。