scikit-learn學習 - 朴素貝葉斯


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:

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 i that is an indicator for class y, where the multinomial variant would simply ignore a non-occurring feature.

文本分類的例子中,詞頻向量用於測試,並且分類。一些情況下,BernoulliNB 的效果會更好,尤其是一些短的文檔。時間允許的情況下,可以嘗試兩種方法。

References:

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 方法調用朴素貝葉斯模型,可能會損失一部分全局效果。所以建議截取樣本盡量接近內存允許的最大值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM