# 樸素貝葉斯分類器
> 來源:http://blog.csdn.net/u011067360/article/details/22890465
**貝葉斯定理**
貝葉斯定理解決了現實生活里經常遇到的問題:已知某條件概率,如何得到兩個事件交換后的概率,也就是在已知P(A|B)的情況下如何求得P(B|A)。這里先解釋什么是條件概率:
表示事件B已經發生的前提下,事件A發生的概率,叫做事件B發生下事件A的條件概率。其基本求解公式為:。
貝葉斯定理之所以有用,是因為我們在生活中經常遇到這種情況:我們可以很容易直接得出P(A|B),P(B|A)則很難直接得出,但我們更關心P(B|A),貝葉斯定理就為我們打通從P(A|B)獲得P(B|A)的道路。
下面不加證明地直接給出貝葉斯定理:

## 樸素貝葉斯分類的原理與流程
樸素貝葉斯分類是一種十分簡單的分類算法,叫它樸素貝葉斯分類是因為這種方法的思想真的很樸素。
樸素貝葉斯的思想基礎是這樣的:對于給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬于哪個類別。
通俗來說,就好比這么個道理,你在街上看到一個黑人,我問你你猜這哥們哪里來的,你十有八九猜非洲。為什么呢?因為黑人中非洲人的比率最高,當然人家也可能是美洲人或亞洲人,但在沒有其它可用信息下,我們會選擇條件概率最大的類別,這就是樸素貝葉斯的思想基礎。
樸素貝葉斯分類器應用的學習任務中,每個實例_x_可由屬性值的合取描述,而目標函數_f_(_x_)從某有限集合_V_中取值。學習器被提供一系列關于目標函數的訓練樣例,以及新實例(描述為屬性值的元組)<_a_<sub style="color:rgb(51,51,51)">1</sub>,_a_<sub style="color:rgb(51,51,51)">2</sub>…_a<sub>n</sub>_>,然后要求預測新實例的目標值(或分類)。
貝葉斯方法的新實例分類目標是在給定描述實例的屬性值<_a_<sub>1</sub>,_a_<sub>2</sub>…_a<sub>n</sub>_>下,得到最可能的目標值_V<sub>MAP</sub>_。

可使用貝葉斯公式將此表達式重寫為
(1)
現在要做的是基于訓練數據估計(1)式中兩個數據項的值。估計每個_P_(_v<sub>j</sub>_)很容易,只要計算每個目標值_v<sub>j</sub>_出現在訓練數據中的頻率就可以。
然而,除非有一非常大的訓練數據的集合,否則用這樣方法估計不同的_P_(_a_<sub>1</sub>,_a_<sub>2</sub>…_a<sub>n</sub>_|_v<sub>j</sub>_)項不太可行。
問題在于這些項的數量等于可能實例的數量乘以可能目標值的數量。因此為獲得合理的估計,實例空間中每個實例必須出現多次。
樸素貝葉斯分類器基于一個簡單的假定:在給定目標值時屬性值之間相互條件獨立。
換言之,該假定說明給定實例的目標值情況下,觀察到聯合的_a_<sub>1</sub>,_a_<sub>2</sub>…_a<sub>n</sub>_的概率正好是對每個單獨屬性的概率乘積:

將其代入(1)式中,可得到樸素貝葉斯分類器所使用的方法:
**樸素貝葉斯分類器:**

其中_v<sub>NB</sub>_表示樸素貝葉斯分類器輸出的目標值。
注意在樸素貝葉斯分類器中,須從訓練數據中估計的不同_P_(_a<sub>i</sub>_|_v<sub>j</sub>_)項的數量只是不同的屬性值數量乘以不同目標值數量——這比要估計_P_(_a_<sub>1</sub>,_a_<sub>2</sub>…_a<sub>n</sub>_|_v<sub>j</sub>_)項所需的量小得多。
概括地講,樸素貝葉斯學習方法需要估計不同的_P_(_v<sub>j</sub>_)和_P_(_a<sub>i</sub>_|_v<sub>j</sub>_)項,基于它們在訓練數據上的頻率。這些估計對應了待學習的假設。然后該假設使用上面式中的規則來分類新實例。只要所需的條件獨立性能夠被滿足,樸素貝葉斯分類_v<sub>NB</sub>_等于_MAP_分類。
樸素貝葉斯學習方法和其他已介紹的學習方法之間有一有趣的差別:沒有明確的搜索假設空間的過程(這里,可能假設的空間為可被賦予不同的_P_(_v<sub>j</sub>_)和_P_(_a<sub>i</sub>_|_v<sub>j</sub>_)項的可能值。相反,假設的形成不需要搜索,只是簡單地計算訓練樣例中不同數據組合的出現頻率)。
**?樸素貝葉斯分類的正式定義如下:**
1、設為一個待分類項,而每個a為x的一個特征屬性。
2、有類別集合。
3、計算。
4、如果,則。
那么現在的關鍵就是如何計算第3步中的各個條件概率。我們可以這么做:
1、找到一個已知分類的待分類項集合,這個集合叫做訓練樣本集。
2、統計得到在各類別下各個特征屬性的條件概率估計。即。
3、如果各個特征屬性是條件獨立的,則根據貝葉斯定理有如下推導:

因為分母對于所有類別為常數,因為我們只要將分子最大化皆可。又因為各特征屬性是條件獨立的,所以有:

## 樸素貝葉斯分類實例:按照某人是否要打網球來劃分天氣
| Day | _Outlook_ | _Temperature_ | _Humidity_ | _Wind_ | _PlayTennis_ |
| --- | --- | --- | --- | --- | --- |
| D1 | Sunny | Hot | High | Weak | No |
| D2 | Sunny | Hot | High | Strong | No |
| D3 | Overcast | Hot | High | Weak | Yes |
| D4 | Rain | Mild | High | Weak | Yes |
| D5 | Rain | Cool | Normal | Weak | Yes |
| D6 | Rain | Cool | Normal | Strong | No |
| D7 | Overcast | Cool | Normal | Strong | Yes |
| D8 | Sunny | Mild | High | Weak | No |
| D9 | Sunny | Cool | Normal | Weak | Yes |
| D10 | Rain | Mild | Normal | Weak | Yes |
| D11 | Sunny | Mild | Normal | Strong | Yes |
| D12 | Overcast | Mild | High | Strong | Yes |
| D13 | Overcast | Hot | Normal | Weak | Yes |
| D14 | Rain | Mild | High | Strong | No |
這里我們使用此表中的數據結合樸素貝葉斯分類器來分類下面的新實例:
```
Outlook=sunny, Temperature=cool,Humidity=high,Wind=strong
```
我們的任務是對此新實例預測目標概念_PlayTennis_ 的目標值(_yes_ 或_no_)。將上面式子應用到當前的任務,目標值_v<sub>NB</sub>_ 由下式給出:

(2)
注意在最后一個表達式中_a<sub>i</sub>_已經用新實例的特定屬性值實例化了。為計算_v<sub>NB</sub>_,現在需要10個概率,它們都可以訓練數據中估計出。
首先不同目標值的概率可以基于這14個訓練樣例的頻率很容易地估計出:
```
P(PlayTennis=yes)=9/14=0.64
P(PlayTennis=no)=5/14=0.36
```
相似地,可以估計出條件概率,例如對于_Wind_=_Strong_有:
```
P(Wind=strong|PlayTennis=yes)=3/9=0.33
P(Wind=strong|PlayTennis=no)=3/5=0.60
```
使用這些概率估計以及相似的對剩余屬性的估計,可按照式(2)計算_v<sub>NB</sub>_如下(為簡明起見忽略了屬性名)。
```
P(yes)P(sunny|yes)P(cool|yes)P(high|yes)P(strong|yes)=0.0053
P(no)P(sunny|no)P(cool|no)P(high|no)P(strong|no)=0.0206
```
這樣,基于從訓練數據中學習到的概率估計,樸素貝葉斯分類器將此實例賦以目標值_PlayTennis_=_no_ 。
更進一步,通過將上述的量歸一化,可計算給定觀察值下目標值為_no_ 的條件概率。對于此例,概率為0.0206/(0.0206+0.0053)=0.795。
**從數學角度來說,分類問題可做如下定義:**
已知集合:和,確定映射規則,使得任意有且僅有一個使得成立。(不考慮模糊數學里的模糊集情況)
其中C叫做類別集合,其中每一個元素是一個類別,而I叫做項集合,其中每一個元素是一個待分類項,f叫做分類器。分類算法的任務就是構造分類器f。
這里要著重強調,分類問題往往采用經驗性方法構造映射規則,即一般情況下的分類問題缺少足夠的信息來構造100%正確的映射規則,而是通過對經驗數據的學習從而實現一定概率意義上正確的分類,因此所訓練出的分類器并不是一定能將每個待分類項準確映射到其分類,分類器的質量與分類器構造方法、待分類數據的特性以及訓練樣本數量等諸多因素有關。