中文文檔: http://sklearn.apachecn.org/cn/stable/modules/naive_bayes.html
英文文檔: http://sklearn.apachecn.org/en/stable/modules/naive_bayes.html
官方文檔: http://scikit-learn.org/stable/
GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)
貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者
關於我們: http://www.apachecn.org/organization/209.html
1.9. 樸素貝葉斯
樸素貝葉斯方法是基於貝葉斯定理的一組有監督學習算法,即“簡單”地假設每對特徵之間相互獨立。 給定一個類別 和一個從 到 的相關的特徵向量, 貝葉斯定理闡述了以下關係:
使用簡單(naive)的假設-每對特徵之間都相互獨立:
對於所有的 :math: i ,這個關係式可以簡化爲
由於在給定的輸入中 是一個常量,我們使用下面的分類規則:
我們可以使用最大後驗概率(Maximum A Posteriori, MAP) 來估計 和 ; 前者是訓練集中類別 的相對頻率。
各種各樣的的樸素貝葉斯分類器的差異大部分來自於處理 分佈時的所做的假設不同。
儘管其假設過於簡單,在很多實際情況下,樸素貝葉斯工作得很好,特別是文檔分類和垃圾郵件過濾。這些工作都要求 一個小的訓練集來估計必需參數。(至於爲什麼樸素貝葉斯表現得好的理論原因和它適用於哪些類型的數據,請參見下面的參考。)
相比於其他更復雜的方法,樸素貝葉斯學習器和分類器非常快。 分類條件分佈的解耦意味着可以獨立單獨地把每個特徵視爲一維分佈來估計。這樣反過來有助於緩解維度災難帶來的問題。
另一方面,儘管樸素貝葉斯被認爲是一種相當不錯的分類器,但卻不是好的估計器(estimator),所以不能太過於重視從 predict_proba
輸出的概率。
參考文獻:
- H. Zhang (2004). The optimality of Naive Bayes. Proc. FLAIRS.
1.9.1. 高斯樸素貝葉斯
GaussianNB
實現了運用於分類的高斯樸素貝葉斯算法。特徵的可能性(即概率)假設爲高斯分佈:
參數 和 使用最大似然法估計。
>>> 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. 多項分佈樸素貝葉斯
MultinomialNB
實現了服從多項分佈數據的樸素貝葉斯算法,也是用於文本分類(這個領域中數據往往以詞向量表示,儘管在實踐中
tf-idf 向量在預測時表現良好)的兩大經典樸素貝葉斯算法之一。 分佈參數由每類 的 向量決定,
式中 是特徵的數量(對於文本分類,是詞彙量的大小) 是樣本中屬於類 中特徵 概率 。
參數 使用平滑過的最大似然估計法來估計,即相對頻率計數:
- 式中 是 訓練集 中 特徵 在類 中出現的次數,
- 是類 中出現所有特徵的計數總和。
先驗平滑因子 應用於在學習樣本中沒有出現的特徵,以防在將來的計算中出現0概率輸出。 把 被稱爲拉普拉斯平滑(Lapalce smoothing),而 被稱爲利德斯通(Lidstone smoothing)。
1.9.3. 伯努利樸素貝葉斯
BernoulliNB
實現了用於多重伯努利分佈數據的樸素貝葉斯訓練和分類算法,即有多個特徵,但每個特徵
都假設是一個二元 (Bernoulli, boolean) 變量。 因此,這類算法要求樣本以二元值特徵向量表示;如果樣本含有其他類型的數據, 一個 BernoulliNB
實例會將其二值化(取決於 binarize
參數)。
伯努利樸素貝葉斯的決策規則基於
與多項分佈樸素貝葉斯的規則不同 伯努利樸素貝葉斯明確地懲罰類 中沒有出現作爲預測因子的特徵 ,而多項分佈分佈樸素貝葉斯只是簡單地忽略沒出現的特徵。
在文本分類的例子中,詞頻向量(word occurrence vectors)(而非詞數向量(word count vectors))可能用於訓練和用於這個分類器。 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.4. 堆外樸素貝葉斯模型擬合
樸素貝葉斯模型可以解決整個訓練集不能導入內存的大規模分類問題。 爲了解決這個問題, MultinomialNB
, BernoulliNB
,
和 GaussianNB
實現了 partial_fit
方法,可以動態的增加數據,使用方法與其他分類器的一樣,使用示例見 Out-of-core
classification of text documents 。所有的樸素貝葉斯分類器都支持樣本權重。
與 fit
方法不同,首次調用 partial_fit
方法需要傳遞一個所有期望的類標籤的列表。
對於 scikit-learn 中可用方案的概覽,另見 out-of-core learning 文檔。
所有樸素貝葉斯模型調用 partial_fit
都會引入一些計算開銷。推薦讓數據快越大越好,其大小與 RAM 中可用內存大小相同。
中文文檔: http://sklearn.apachecn.org/cn/stable/modules/naive_bayes.html
英文文檔: http://sklearn.apachecn.org/en/stable/modules/naive_bayes.html
官方文檔: http://scikit-learn.org/stable/
GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)
貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者
關於我們: http://www.apachecn.org/organization/209.html
有興趣的們也可以和我們一起來維護,持續更新中 。。。
機器學習交流羣: 629470233