樸素貝葉斯分類器--個人筆記
阿新 • • 發佈:2019-02-10
樸素貝葉斯分類器作為基於貝葉斯定理的監督學習演算法,曾入選“資料探勘十大演算法”。本文結合個人學習筆記和scikit-learn中樸素貝葉斯演算法的官方文件,總結樸素貝葉斯演算法的基本思想原理和scikit-learn中三種類型的樸素貝葉斯分類器的適用範圍,供以後學習使用。
樸素貝葉斯分類演算法的基本原理:
最小化分類錯誤率的最優貝葉斯分類是使後驗概率P(y|x)最大化,即:
根據貝葉斯公式:
樸素貝葉斯假設每個樣本的所有屬性相互獨立,則有:
所以我們的貝葉斯公式可轉化為:
由於為已知常數,則轉化為:這就是樸素貝葉斯的表示式。
1、Gaussian Naive Bayes(GaussianNB)
Gaussian Naive Bayes演算法假設服從
所以對於連續屬性,GaussianNB分類器是個不錯的選擇,這裡附上scikit-learn官方文件中的一個例子的Python程式碼:
2、Multinomial Naive Bayes(MultinomialNB)MultinomialNB分類器假設樣本屬性服從多重伯努利分佈,所以官方文件中特別提到了這種分類器適用於文字分類。所以對於屬性非連續,屬性值取值離散的樣本(一般有多種離散值),MultinomialNB是個不錯的選擇。官方文件中的程式碼:>>> import numpy as np >>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) >>> Y = np.array([1, 1, 1, 2, 2, 2]) >>> from sklearn.naive_bayes import GaussianNB >>> clf = GaussianNB() >>> clf.fit(X, Y) GaussianNB(priors=None) >>> print(clf.predict([[-0.8, -1]])) [1] >>> clf_pf = GaussianNB() >>> clf_pf.partial_fit(X, Y, np.unique(Y)) GaussianNB(priors=None) >>> print(clf_pf.predict([[-0.8, -1]])) [1]
3、Bernoulli Naive Bayes(BernoulliNB)BernoulliNB分類器顧名思義,伯努利貝葉斯分類器,是一種特殊的MultinomialNB,其樣本的所有特徵只取兩種屬性值(0,1),所以BernoulliNB分類器基於公式:來計算。官方文件中的樣例程式碼:>>> import numpy as np >>> X = np.random.randint(5, size=(6, 100)) >>> y = np.array([1, 2, 3, 4, 5, 6]) >>> from sklearn.naive_bayes import MultinomialNB >>> clf = MultinomialNB() >>> clf.fit(X, y) MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True) >>> print(clf.predict(X[2:3])) [3]
>>> import numpy as np
>>> X = np.random.randint(2, size=(6, 100))
>>> Y = np.array([1, 2, 3, 4, 4, 5])
>>> from sklearn.naive_bayes import BernoulliNB
>>> clf = BernoulliNB()
>>> clf.fit(X, Y)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
>>> print(clf.predict(X[2:3]))
[3]
三種類型的樸素貝葉斯分類器,其適用的樣本範圍不同。本文參考scikit-learn官方文件的簡單總結,以期以後在使用時能夠用上。