1.9. Naive Bayes
朴素貝葉斯是一種監督學習的算法,基於貝葉斯公式和“朴素”的假設——特征之間相互獨立。給出分類變量y和相互之間獨立的特征x1到xn,貝葉斯公式如下:
根據獨立性假設有
對於所有的i,它們的關系可以表示為
上面的公式中,P(x1,x2,...,xn)為一個常數,因此可以用下面的判別規則:
我們用最大后驗概率(MAP)估計 P(y) 和 P(xi|y);后者為測試集中分類 y 的條件概率。
不同朴素貝葉斯之間的區別主要是它們對分布的假設 P(xi|y)不同。
盡管假設過於簡單,但在實際情況下,朴素貝葉斯分類的效果卻很好,尤其是文本分類和垃圾郵件過濾。它只需要小量樣本去估計必要的參數。(理論上,朴素貝葉斯效果好的原因為,和適用怎樣的數據集,可參看下面的文獻。)
朴素貝葉斯學習和分類比其他先進的方法更快。分類的特征分布可以被分解為每個一維特征的條件分布。這避免了因為維度增加導致的問題。(This in turn helps to alleviate problems stemming from the curse of dimensionality.)
另一方面,盡管眾所周知,朴素貝葉斯是一個實用的分類器,但它卻有一個不好的假設,所以, predict_proba 預測的概率,進攻參考使用。
References:
- H. Zhang (2004). The optimality of Naive Bayes. Proc. FLAIRS.
1.9.1. Gaussian Naive Bayes
GaussianNB 用於高斯朴素貝葉斯分類算法。它假設特征分布近似高斯分布:
參數 σy 和 μy 用最大似然法估計。
>>> from sklearn import datasets >>> iris = datasets.load_iris() >>> from sklearn.naive_bayes import GaussianNB >>> gnb = GaussianNB() >>> y_pred = gnb.fit(iris.data, iris.target).predict(iris.data) >>> print("Number of mislabeled points out of a total %d points : %d" ... % (iris.data.shape[0],(iris.target != y_pred).sum())) Number of mislabeled points out of a total 150 points : 6
1.9.2. Multinomial Naive Bayes
MultinomialNB 用於多項式分布朴素貝葉斯算法,是兩種經典的貝葉斯算法之一,被用於文本分類(數據常用詞頻向量表示,tf-idf向量也常使用)。每個分類 y 的分布被參數化為向量 θy = (θy1,θy2,...,θyn),n 為特征的個數(文本分類中,為單詞的個數),θyi 表示條件概率 P(xi|y), 即特征 i 在分類 y 中出現的概率。
參數 θy 用平滑極大似然估計,與其出現的頻次有關:
其中, 表示測試數據集 T 中,分類 y 的第 i 個特征出現的次數,而
表示分類 y 的所有特征出現的次數。
平滑系數 α ≧ 0, 為了防止后續計算中出現測試樣本中沒有的特征,概率為0的情況。設置 α = 1,叫做Laplace平滑,而 α < 1,叫做 Lidstone平滑。
1.9.3. Bernoulli Naive Bayes
BernoulliNB 用於數據分布為多項貝努利分布的朴素貝葉斯模型訓練和預測;也就是說有多個特征,並且每個特征的值為二分類變量。因此,要就樣本特征被表示成二分類的向量;如果包含任何其他數據, BernoulliNB 會將其轉化為二分類(參數 binarize 可控制轉化方法)。
貝努力朴素貝葉斯的判斷規則基於:
與多項式貝努力判斷規則不同, in that it explicitly penalizes the non-occurrence of a feature that is an indicator for class
, where the multinomial variant would simply ignore a non-occurring feature.
文本分類的例子中,詞頻向量用於測試,並且分類。一些情況下,BernoulliNB 的效果會更好,尤其是一些短的文檔。時間允許的情況下,可以嘗試兩種方法。
References:
- 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.4. Out-of-core naive Bayes model fitting
朴素貝葉斯被用於解決大規模的分類問題時,數據訓練可能不適合在內存中進行。解決這個問題, MultinomialNB, BernoulliNB, and GaussianNB 可以與 partial_fit配合增量的訓練,見例子Out-of-core classification of text documents。兩個離散型分類器支持樣本權重,GaussianNB 不支持。
與 fit 方法相比, partial_fit 第一次訓練時,需要傳遞所有的分類標簽列表。
查看 scikit-learn 中的內容,查看文檔 out-of-core learning。
筆記:partial_fit 方法調用朴素貝葉斯模型,可能會損失一部分全局效果。所以建議截取樣本盡量接近內存允許的最大值。