樸素貝葉斯Naive Bayes

項目地址:https://github.com/Daya-Jin/ML_for_learner/blob/master/naive_bayes/Gaussian Naive Bayes.ipynb
原博客:https://daya-jin.github.io/2018/10/04/NaiveBayes/

模型概述

首先回顧一下貝葉斯公式:

P(AB)=P(AB)P(B)=P(BA)P(A)P(B) P(A|B)=\frac{P(AB)}{P(B)}=\frac{P(B|A)P(A)}{P(B)}

以二分類爲例,上述公式以機器學習任務的形式來寫的話就成爲了:

P(y=0x)=P(xy=0)P(y=0)P(x)P(y=1x)=P(xy=1)P(y=1)P(x) P(y=0|x)=\frac{P(x|y=0)P(y=0)}{P(x)} \\ P(y=1|x)=\frac{P(x|y=1)P(y=1)}{P(x)} \\

其中xx爲待預測樣本。對於需要算的幾個概率,一個一個來看。

P(xy=0)P(x|y=0),注意到樣本xx是一個同時有多個值的向量,x=[x0x1xn]x= \left[ \begin{matrix} x_{0} & x_{1} & \cdots & x_{n} \end{matrix} \right],在數據集中很可能沒有跟待預測樣本x(i)x^{(i)}完全相同的樣本,那麼就沒法直接計算P(xy=0)P(x|y=0)。注意到在各特徵相互獨立的前提下,有:

P(xy=0)=P(x0D=x0y=0)P(x1D=x1y=0)...P(xnD=xny=0) P(x|y=0)=P(x^{D}_{0}=x_{0}|y=0)P(x^{D}_{1}=x_{1}|y=0)...P(x^{D}_{n}=x_{n}|y=0)

P(y=0)P(y=0),這個好辦,直接計算樣本中負樣本出現的頻率,相對應地,P(y=1)P(y=1)即樣本中正樣本出現的頻率。

P(x)P(x)這個概率同樣不好直接計算,根據全概率公式,有:

P(x)=P(y=0)P(xy=0)+P(y=1)P(xy=1) P(x)=P(y=0)P(x|y=0)+P(y=1)P(x|y=1)

在各特徵獨立的條件下,上式可以寫成:

P(x)=P(y=0)P(x0D=x0y=0)...P(xnD=xny=0)+P(y=1)P(x0D=x0y=1)...P(xnD=xny=1) \begin{aligned} P(x)&=P(y=0)P(x^{D}_{0}=x_{0}|y=0)...P(x^{D}_{n}=x_{n}|y=0) \\ &+P(y=1)P(x^{D}_{0}=x_{0}|y=1)...P(x^{D}_{n}=x_{n}|y=1) \\ \end{aligned}

容易看出,對同一個數據集而言,P(x)P(x)是不變的,所以只需要關注分子即可。

所以上述問題在多分類的情況下可以用以下公式來表達:

y^=arg maxcj P(Y=ck)i=0nP(xiD=xiY=cj) \hat{y}=arg\ \max\limits_{c_{j}}\ P(Y=c_{k})\prod\limits_{i=0}^{n}P(x_{i}^{D}=x_{i}|Y=c_{j})

其中xx爲待預測樣本,y^\hat{y}爲模型輸出,xiDx_{i}^{D}爲數據集中的樣本的第ii個特徵,YY爲數據集標籤,cjc_{j}爲第jj個類別。同時注意到上面做了兩次假設:各特徵之間相互獨立,這是樸素貝葉斯最重要的一個前提條件。

連續屬性

對於數據集中的連續屬性
xiDx_{i}^{D},怎麼計算P(xiD=xiY=ck)P(x_{i}^{D}=x_{i}|Y=c_{k})?可假設該連續特徵在某一類別下ckc_{k}服從某一分佈,如高斯分佈P(xiY=ck)=12πσck,iexp((xiμck,i)22σck,i2)P(x_{i}|Y=c_{k})=\frac{1}{\sqrt{2\pi}\sigma_{c_{k},i}}exp(-\frac{(x_{i}-\mu_{c_{k},i})^{2}}{2\sigma_{c_{k},i}^{2}})

一點改進

在原始的問題公式中,如果累乘項中的某一項爲零,那麼就會影響最終結果從而始終得到零概率輸出,如有一項
P(xiD=xiY=cj)=0P(x_{i}^{D}=x_{i}|Y=c_{j})=0,則不管該樣本的其他屬性如何,模型對該樣本屬於各個類別的預測概率均爲0,這說明模型沒有很好的泛化能力。有兩種改進方法:

  1. 將累乘取對數轉換成累加

  2. 拉普拉斯修正

    原概率計算公式爲
    P(Y=ck)=DckDP(Y=c_{k})=\frac{|D_{c_{k}}|}{|D|}
    P(xiD=xiY=ck)=Dck,xiDckP(x_{i}^{D}=x_{i}|Y=c_{k})=\frac{|D_{c_{k},x_{i}}|}{|D_{c_{k}}|},經拉普拉斯修正後的概率計算公式爲P^(Y=ck)=Dck+1D+N\hat{P}(Y=c_{k})=\frac{|D_{c_{k}}|+1}{|D|+N}P^(xiD=xiY=ck)=Dck,xi+1Dck+Ni\hat{P}(x_{i}^{D}=x_{i}|Y=c_{k})=\frac{|D_{c_{k},x_{i}}|+1}{|D_{c_{k}}|+N_{i}},其中NN爲數據集的類別數,NiN_{i}爲第ii個特徵的可能取值數。

實現指導

完整代碼

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