樸素貝葉斯分類器

，在機器學習中是一系列以假設特徵之間強（樸素）獨立下運用貝葉斯定理為基礎的簡單概率分類器。
單純貝氏自1950年代已廣泛研究，在1960年代初就以另外一個名稱引入到文本信息檢索界中，488 並仍然是文本分類的一種熱門（基準）方法，文本分類是以詞頻為特徵判斷文件所屬類別或其他（如垃圾郵件、合法性、體育或政治等等）的問題。通過適當的預處理，它可以與這個領域更先進的方法（包括支持向量機）相競爭。 它在自動醫療診斷中也有應用。
單純貝氏分類器是高度可擴展的，因此需要數量與學習問題中的變量（特徵/預測器）成線性關係的參數。最大似然訓練可以通過評估一個封閉形式的表達式來完成，718 只需花費線性時間，而不需要其他很多類型的分類器所使用的費時的迭代逼近。
在統計學和計算機科學文獻中，單純貝氏模型有各種名稱，包括簡單貝葉斯和獨立貝葉斯。 所有這些名稱都參考了貝葉斯定理在該分類器的決策規則中的使用，但單純貝氏不（一定）用到貝葉斯方法； 《Russell和Norvig》提到“『單純貝氏』有時被稱為貝葉斯分類器，這個馬虎的使用促使真正的貝葉斯論者稱之為傻瓜貝葉斯模型。”482

**簡介**
單純貝氏是一種建分類器的簡單方法。該分類器模型會給問題實例分配用特徵值表示的類標籤，類標籤取自有限集合。它不是訓練這種分類器的單一算法，而是一系列基於相同原理的算法：所有單純貝氏分類器都假定樣本每個特徵與其他特徵都不相關。舉個例子，如果一種水果其具有紅，圓，直徑大概3英寸等特徵，該水果可以被判定為是蘋果。儘管這些特徵相互依賴或者有些特徵由其他特徵決定，然而單純貝氏分類器認為這些屬性在判定該水果是否為蘋果的概率分佈上獨立的。
對於某些類型的概率模型，在監督式學習的樣本集中能獲取得非常好的分類效果。在許多實際應用中，單純貝氏模型參數估計使用最大似然估計方法；換而言之，在不用到貝葉斯概率或者任何貝葉斯模型的情況下，單純貝氏模型也能奏效。
儘管是帶著這些樸素思想和過於簡單化的假設，但單純貝氏分類器在很多複雜的現實情形中仍能夠取得相當好的效果。2004年，一篇分析貝葉斯分類器問題的文章揭示了單純貝氏分類器取得看上去不可思議的分類效果的若干理論上的原因。 儘管如此，2006年有一篇文章詳細比較了各種分類方法，發現更新的方法（如決策樹和隨機森林）的性能超過了貝葉斯分類器。
單純貝氏分類器的一個優勢在於只需要根據少量的訓練數據估計出必要的參數（變量的均值和方差）。由於變量獨立假設，只需要估計各個變量的方法，而不需要確定整個協方差矩陣。

**單純貝氏概率模型**
理論上，概率模型分類器是一個條件概率模型。

獨立的類別變量有若干類別，條件依賴於若干特徵變量
,,...,。但問題在於如果特徵數量較大或者每個特徵能取大量值時，基於概率模型列出概率表變得不現實。所以我們修改這個模型使之變得可行。
貝葉斯定理有以下式子：

用樸素的語言可以表達為：

實際中，我們只關心分式中的分子部分，因為分母不依賴於而且特徵的值是給定的，於是分母可以認為是一個常數。這樣分子就等價於聯合分佈模型。

重複使用鏈式法則，可將該式寫成條件概率的形式，如下所示：

:
:
:
:
:
現在“樸素”的條件獨立假設開始發揮作用：假設每個特徵對於其他特徵,在給定類別下是條件獨立的。這就意味著

對於，所以聯合分佈模型可以表達為

這意味著上述假設下，類變量的條件分佈可以表達為：

其中（證據因子）是一個只依賴與等的縮放因子，當特徵變量的值已知時是一個常數。
由於分解成所謂的類先驗概率和獨立概率分佈，上述概率模型的可掌控性得到很大的提高。如果這是一個分類問題，且每個可以表達為個參數，於是相應的單純貝氏模型有(k − 1) + n r k個參數。實際應用中，通常取（二分類問題），（伯努利分佈作為特徵），因此模型的參數個數為，其中是二值分類特徵的個數。

**從概率模型中構造分類器**
討論至此為止我們導出了獨立分佈特徵模型，也就是單純貝氏概率模型。單純貝氏分類器包括了這種模型和相應的決策規則。一個普通的規則就是選出最有可能的那個：這就是大家熟知的最大後驗概率（MAP）決策準則。相應的分類器便是如下定義的公式：


**參數估計**
所有的模型參數都可以通過訓練集的相關頻率來估計。常用方法是概率的最大似然估計。類的先驗概率可以通過假設各類等概率來計算（先驗概率 = 1 / (類的數量)），或者通過訓練集的各類樣本出現的次數來估計（A類先驗概率=（A類樣本的數量）/(樣本總數)）。為了估計特徵的分佈參數，我們要先假設訓練集數據滿足某種分佈或者非參數模型。 

**高斯單純貝氏**
如果要處理的是連續數據一種通常的假設是這些連續數值為高斯分佈。
例如，假設訓練集中有一個連續屬性，。我們首先對數據根據類別分類，然後計算每個類別中的均值和方差。令 表示為在c類上的均值，令為 在c類上的方差。在給定類中某個值的概率，，可以通過將表示為均值為方差為正態分佈計算出來。如下，
處理連續數值問題的另一種常用的技術是通過離散化連續數值的方法。通常，當訓練樣本數量較少或者是精確的分佈已知時，通過概率分佈的方法是一種更好的選擇。在大量樣本的情形下離散化的方法表現更優，因為大量的樣本可以學習到數據的分佈。由於單純貝氏是一種典型的用到大量樣本的方法（越大計算量的模型可以產生越高的分類精確度），所以單純貝氏方法都用到離散化方法，而不是概率分佈估計的方法。

**樣本修正**
如果一個給定的類和特徵值在訓練集中沒有一起出現過，那麼基於頻率的估計下該概率將為0。這將是一個問題。因為與其他概率相乘時將會把其他概率的信息統統去除。所以常常要求要對每個小類樣本的概率估計進行修正，以保證不會出現有為0的概率出現。

**討論**
儘管實際上獨立假設常常是不準確的，但單純貝氏分類器的若干特性讓其在實踐中能夠取得令人驚奇的效果。特別地，各類條件特徵之間的解耦意味著每個特徵的分佈都可以獨立地被當做一維分佈來估計。這樣減輕了由於維數災帶來的阻礙,當樣本的特徵個數增加時就不需要使樣本規模呈指數增長。然而單純貝氏在大多數情況下不能對類概率做出非常準確的估計，但在許多應用中這一點並不要求。例如，單純貝氏分類器中，依據最大後驗概率決策規則只要正確類的後驗概率比其他類要高就可以得到正確的分類。所以不管概率估計輕度的甚至是嚴重的不精確都不影響正確的分類結果。在這種方式下，分類器可以有足夠的魯棒性去忽略單純貝氏概率模型上存在的缺陷。

**實例**

**性別分類**
問題描述:通過一些測量的特徵，包括身高、體重、腳的尺寸，判定一個人是男性還是女性。

**訓練**
訓練數據如下：
假設訓練集樣本的特徵滿足高斯分佈，得到下表：
我們認為兩種類別是等概率的，也就是P(male)= P(female) = 0.5。在沒有做辨識的情況下就做這樣的假設並不是一個好的點子。但我們通過數據集中兩類樣本出現的頻率來確定P(C)，我們得到的結果也是一樣的。

**測試**
以下給出一個待分類是男性還是女性的樣本。
我們希望得到的是男性還是女性哪類的後驗概率大。男性的後驗概率通過下面式子來求取

女性的後驗概率通過下面式子來求取

證據因子（通常是常數）用來對各類的後驗概率之和進行歸一化.

證據因子是一個常數（在正態分佈中通常是正數），所以可以忽略。接下來我們來判定這樣樣本的性別。

,其中，是訓練集樣本的正態分佈參數. 注意，這裡的值大於1也是允許的 – 這裡是概率密度而不是概率，因為身高是一個連續的變量.








由於女性後驗概率的分子比較大，所以我們預計這個樣本是女性。

**文本分類**
這是一個用單純貝氏分類做的一個文本分類問題的例子。考慮一個基於內容的文本分類問題，例如判斷郵件是否為垃圾郵件。想像文本可以分成若干的類別，首先文本可以被一些單詞集標註，而這個單詞集是獨立分佈的，在給定的C類文本中第i個單詞出現的概率可以表示為：

（通過這種處理，我們進一步簡化了工作，假設每個單詞是在文中是隨機分佈的-也就是單詞不依賴於文本的長度，與其他詞出現在文中的位置，或者其他文本內容。）
所以，對於一個給定類別C，文本D包含所有單詞的概率是:

我們要回答的問題是「文檔D屬於類C的概率是多少？」換而言之是多少？
現在定義


通過貝葉斯定理將上述概率處理成似然度的形式

假設現在只有兩個相互獨立的類別，S和¬S（垃圾郵件和非垃圾郵件），這裡每個元素（郵件）要麼是垃圾郵件，要麼就不是。


用上述貝葉斯的結果，可以寫成


兩者相除:

整理得:

這樣概率比p(S | D) / p(¬S | D)可以表達為似然比。實際的概率p(S | D)可以很容易通過log (p(S | D) / p(¬S | D))計算出來，基於p(S | D) + p(¬S | D) = 1。
結合上面所討論的概率比，可以得到：

(這種對數似然比的技術在統計中是一種常用的技術。在這種兩個獨立的分類情況下（如這個垃圾郵件的例子），把對數似然比轉化為S曲線的形式)。
最後文本可以分類，當或者時判定為垃圾郵件，否則為正常郵件。

**參見**
 AODE- 貝葉斯垃圾郵件過濾- 貝葉斯網絡- 隨機森林- 線性分類器- 提升方法- 模糊邏輯- 邏輯斯諦迴歸- Class membership probabilities- 神經網絡- 預測分析- 感知機- 支持向量機- 貝葉斯定理- 有監督學習- 分類器- 最大似然估計- 貝葉斯概率- boosted trees

**參考文獻**

**延伸閱讀**
 cite journal |last1=Domingos |first1=Pedro |first2=Michael |last2=Pazzani |year=1997 |title=On the optimality of the simple Bayesian classifier under zero-one loss |journal=Machine Learning |volume=29 |pages=103–137 |url=http://citeseer.ist.psu.edu/domingos97optimality.html |access-date=2012-04-01 |archive-date=2008-04-18 |archive-url=https://web.archive.org/web/20080418224504/http://citeseer.ist.psu.edu/domingos97optimality.html |dead-url=no - doi=10.1007/s10994-005-4258-6 - dead-url=no - cite journal |last1=Maron |first1=M. E. |year=1961 |title=Automatic Indexing: An Experimental Inquiry |journal=JACM |volume=8 |issue=3 |pages=404–417 |doi=10.1145/321075.321084- pages=8-30

**外部鏈接**
  Book Chapter: Naive Bayes text classification, Introduction to Information Retrieval date=20210224040539 -  Naive Bayes for Text Classification with Unbalanced Classes date=20210131214638 -  Benchmark results of Naive Bayes implementations date=20210417202817 -  Hierarchical Naive Bayes Classifiers for uncertain data date=20150923190708  (an extension of the Naive Bayes classifier).
軟件- Naive Bayes classifiers are available in many general-purpose machine learning and NLP packages, including Apache Mahout,  Mallet date=20120426044516 , NLTK, Orange, scikit-learn and Weka.- IMSL Numerical Libraries Collections of math and statistical algorithms available in C/C++, Fortran, Java and C#/.NET. Data mining routines in the IMSL Libraries include a Naive Bayes classifier.-  Winnow content recommendation Open source Naive Bayes text classifier works with very small training and unbalanced training sets. High performance, C, any Unix.- An interactive Microsoft Excel spreadsheet  Naive Bayes implementation date=20231129120323  using VBA (requires enabled macros) with viewable source code.-  jBNC - Bayesian Network Classifier Toolbox date=20210131070911 -  Statistical Pattern Recognition Toolbox for Matlab date=20110727124841 .-  ifile date=20200804044917  - the first freely available (Naive) Bayesian mail/spam filter-  NClassifier date=20200804041436  - NClassifier is a .NET library that supports text classification and text summarization. It is a port of Classifier4J.-  Classifier4J date=20111031063055  - Classifier4J is a Java library designed to do text classification. It comes with an implementation of a Bayesian classifier.