樸素貝葉斯分類器及python實現

1.貝葉斯分類的基礎–貝葉斯定理

  • 貝葉斯法則:假設數據遵循某種概率分佈,通過對概率的分析推理以做出最優的決策

  • 貝葉斯公式:根據先驗概率和似然來計算後驗概率
    P(cX)=P(Xc)P(c)P(X)P(c|X) = \frac{P(X|c)P(c)}{P(X)}
    利用了古典的數學理論,通過貝葉斯公式,由先驗概率計算出後驗概率,即是該假設屬於某一類別的概率,然後選擇後驗概率最大的類作爲該假設的目標值。

  • 極大後驗概率(MAP):用貝葉斯公式計算每個候選假設的後驗概率,尋找給定數據D時可能性最大的假設
    cMAP=arg maxcCP(cx)=arg maxcCP(xc)P(c)P(x)=arg maxcCP(xc)P(c)c_{MAP} = arg\ max_{c \in C} P(c|x) = arg\ max_{c \in C} \frac{P(x|c)P(c)}{P(x)} = arg\ max_{c \in C}P(x|c)P(c)

2.貝葉斯分類器

分類是機器學習和數據挖掘中最基礎的一種工作。假設現在我們有一組訓練樣本,以及與其相對應的分類標籤。每個元組都被表示爲n維屬性向量x=(x1,x1,...,xn)x=(x_1,x_1,...,x_n)的形式,一共有k個類別c1,c2,...,ckc_1,c_2,...,c_k。分類要做的就是模型可以預測數據屬於哪個類別。
對於每個類別cic_i,利用貝葉斯公式來估計在給定訓練元組X時的條件概率P(cix)P(c_i|x)
P(cix)=P(ci)P(xci)P(x)P(c_i|x)=\frac{P(c_i)P(x|c_i)}{P(x)}

當且僅當概率P(cix)P(c_i|x)在所有類別中取值最大時,數據xx屬於cic_iP(ci)P(c_i)是類先驗概率,P(xci)P(x|c_i)是樣本xx相對於類cic_i的類條件概率,稱爲似然。因爲P(x)P(x)是用於歸一化的證據因子,其對於所有的類別都是恆定的。所以只需要基於訓練數據來估計P(ci)P(c_i)P(xci)P(x|c_i)

2.1 極大似然估計

估計類條件概率的一種常用策略是先假定其具有某種確定的概率分佈形式,再根據訓練樣本對概率分佈的參數進行估計。記關於類別cc的類條件概率爲P(xc)P(x|c),假設其具有某種概率分佈形式並且被參數向量βc\beta_c唯一確定,則我們就根據訓練數據集來估計參數βc\beta_c,我們將P(xc)P(x|c)記爲P(xβc)P(x|\beta_c)
DcD_c來表示訓練集DD中第cc類樣本組成的集合,假設這些樣本是獨立同分布的,則參數βc\beta_c對於數據集DcD_c的似然是:
P(Dcβc)=xDcP(xβc)P(D_c|\beta_c)=\prod_{x\in{D_c}} P(x|\beta_c)
βc\beta_c進行極大似然估計就是尋找能夠最大化P(Dcβc)P(D_c|\beta_c)的參數值βc\beta_c'。也就是在βc\beta_c的所有可能的取值中,找到一個能夠使數據出現的可能性最大的值。
上式的連乘操作容易造成下溢,通常使用對數似然:
LL(βc)=logP(Dcβc)=xDclogP(xβc)LL(\beta_c)=logP(D_c|\beta_c)=\sum_{x\in{D_c}}logP(x|\beta_c)
此時,參數βc\beta_c的極大似然估計爲:
βc=argβcmaxLL(βc)\beta_c'=arg _{\beta_c}maxLL(\beta_c)
需要注意的是這種參數估計的方法雖然能夠使類條件概率估計變得簡單,但是結果的準確性嚴重依賴於所假設的概率分佈形式是否符合潛在的真實數據分佈。在現實應用中,想要做出較好的接近潛在真實分佈的假設,往往需在一定會程度上利用關於任務本身的經驗知識,否則若僅憑猜測來假設概率分佈形式,很可能產生誤導性的結果。

2.2 貝葉斯分類器存在的問題

  • 對於類條件概率P(xci)P(x|c_i)來說,由於它涉及關於xx所有屬性的聯合概率,直接根據樣本出現的頻率來估計會遇到嚴重的困難,因爲如果假設樣本的d個屬性都是二值的,則樣本空間可能會有2d2^d種可能性。在現實中,這個值往往遠大於訓練樣本數m,也就是說很多樣本的取值可能在訓練樣本中可能根本沒有出現,由於未被觀測到和沒有出現是兩個不同的事件,所以直接根據樣本頻率來估計P(xci)P(x|c_i)是顯然不可行的。
  • 由統計學知,如果每個特徵需要N個樣本,那麼對於10個特徵就需要N10N^{10}個樣本,1000個特徵的詞彙表將需要N1000N^1000個樣本。可以看到,所需樣本數會隨着特徵數目增大而迅速增長。如果特徵之間相互獨立,那麼樣本數就可以從N1000N^{1000}減少到1000N1000*N

3.樸素貝葉斯分類器

我們可以發現基於貝葉斯公式來計算後驗概率P(cx)P(c|x)的主要困難在於類條件概率P(xc)P(x|c)是所有屬性上的聯合概率,難以從有限的訓練樣本中直接估計而得。
爲了避開這個障礙,樸素貝葉斯分類器採用了屬性條件獨立性假設,即對於已知類別所有屬性獨立的對分類結果產生影響,也就是說所有屬性都是條件獨立的,聯合概率就等於每個單獨屬性概率的乘積:
P(xck)=i=1nP(xick)=P(x1ck)P(x2ck)...P(xnck)P(x|c_k)=\prod_{i=1}^nP(x_i|c_k)=P(x_1|c_k)*P(x_2|c_k)*...*P(x_n|c_k)
P(ckx)=P(ck)i=1nP(xick)P(x)P(c_k|x)=\frac{P(c_k)\prod_{i=1}^n{P(x_i|c_k)}}{P(x)}
因爲分母對於所有的類別都是一樣的,所以我們的目標就是:
cMAP=argmaxcjCP(x1,x2,xnc)P(cj)=argmaxcjCP(cj)P(xicj)c_{MAP} = arg max_{c_j \in C} P(x_1, x_2, x_n |c) P(c_j) = arg max_{c_j \in C} P(c_j) \prod P(x_i|c_j)
樸素貝葉斯分類器的訓練過程就是基於訓練數據集來計算類先驗概率P(ci)P(c_i)和類條件概率。

3.1 特徵屬性的條件概率估計的計算

  • 計算條件概率是樸素貝葉斯的關鍵步驟

    1. 當特徵屬性是離散值時,可以很方便的統計訓練樣本中各個特徵屬性在每個類別中出現的頻率
    2. 當特徵屬性是連續值時,可以假定其值服從高斯分佈
      g(x,μ,σ)=12πe(xμ)22σ2g( x, \mu, \sigma) = \frac{1}{\sqrt{2\pi}} e^{\frac{-(x-\mu)^2}{2\sigma^2}}

    P(xkci)=g(xk,μci,σci)P(x_k | c_i) = g(x_k, \mu_{c_i}, \sigma_{c_i})
    只要計算出訓練樣本中各個類別中此特徵項劃分的各均值和標準差,帶入上述公式即可得到需要的估計值。

3.2 需要注意的問題

1. Laplace校準
需要注意的是,若某個屬性值在訓練集中在某個類中沒有出現過,則類條件概率P(xiy)P(x_i|y)會等於零,導致練乘計算出的概率值爲零。爲了避免這個問題,在計算概率值時要進行平滑處理,常用拉普拉斯修正,避免因訓練樣本不充足導致概率估值爲零的問題,對每個特徵的出現數初始化爲1,分母初始化爲2,在訓練集充分大時,修正過程所引入的額先驗的影響也會變得可忽略,使得估計值逐漸趨向於實際概率值。
2. 取對數處理
聯合概率的計算需要多個概率的乘積,概率值都在0-1之間,連乘操作可能會發生下溢出。取對數操作將連乘變爲加法操作 In(ab)=In(a)+In(b)In(a*b) = In(a)+In(b) ,對數函數與原函數單調性一致不會產生任何損失
在這裏插入圖片描述

3.3. 優點

  • 非常容易建立,並且能夠很快作出決策。當有新增樣本數據時,僅對新樣本屬性值所涉及的概率估值進行修正即可實現增量學習。
  • 計算簡單
  • 可處理多類別數據
  • 決策結果很容易解釋
  • 常用於文本分類
  • 在進行其他複雜的分類技術前可以先應用樸素貝葉斯分類。

3.4 缺點

  • 準確性降低(假設不成立)
  • 不適用於特徵之間相關的情況

4.使用樸素貝葉斯進行分類

4.1 數據集

Most Popular Data Set中的wine數據集,這是對意大利同一地區聲場的三種不同品種的酒做大量分析所得出的數據;數據下載地址:https://archive.ics.uci.edu/ml/datasets/wine 該數據是一個多類別數據,一共包含三類。

在這裏插入圖片描述
可以看出該數據沒有缺失項,其中第一列代表數據的類別,標籤分爲爲1,2,3.每類數據分別有58, 71, 48個。下面給出算法的具體代碼:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章