[機器學習] 分類 --- Naive Bayes(樸素貝葉斯)

Naive Bayes-樸素貝葉斯

Bayes’ theorem(貝葉斯法則)

在機率論和統計學中,Bayes’ theorem(貝葉斯法則)根據事件的先驗知識描述事件的機率。貝葉斯法則表達式以下所示html

  • P(A|B) – 在事件B下事件A發生的條件機率
  • P(B|A) – 在事件A下事件B發生的條件機率
  • P(A), P(B) – 獨立事件A和獨立事件B的邊緣機率

順便提一下,上式中的分母P(B)能夠根據全機率公式分解爲:算法


Bayesian inferenc(貝葉斯推斷)

貝葉斯定理的許多應用之一就是貝葉斯推斷,一種特殊的統計推斷方法,隨着信息增長,貝葉斯定理能夠用於更新假設的機率。在決策理論中,貝葉斯推斷與主觀機率密切相關,一般被稱爲「Bayesian probability(貝葉斯機率)」。ruby

貝葉斯推斷根據 prior probability(先驗機率) 和統計模型導出的「likelihood function(似然函數)」的結果,再由貝葉斯定理計算 posterior probability(後驗機率):機器學習


  • P(H) – 已知的先驗機率
  • P(H|E) – 咱們想求的後驗機率,即在B事件發生後對於事件A機率的評估
  • P(E|H) – 在事件H下觀測到E的機率
  • P(E) – marginal likelihood(邊際似然),對於全部的假設都是相同的,所以不參與決定不一樣假設的相對機率
  • P(E|H)/P(E) – likelihood function(可能性函數),這是一個調整因子,經過不斷的獲取信息,可使得預估機率更接近真實機率

貝葉斯推斷例子

假設咱們有兩個裝滿了餅乾的碗,第一個碗裏有10個巧克力餅乾和30個普通餅乾,第二個碗裏兩種餅乾都有20個。咱們隨機挑一個碗,再在碗裏隨機挑餅乾。那麼咱們挑到的普通餅乾來自一號碗的機率有多少?函數

咱們用 H1 表明一號碗,H2 表明二號碗,並且 P(H1) = P(H2) = 0.5。事件 E 表明普通餅乾。由上面能夠獲得 P(E|H1) = 30 / 40 = 0.75,P(E|H2) = 20 / 40 = 0.5。由貝葉斯定理咱們獲得post


  • P(E|H1)P(H1), P(E|H2)P(H2) – 分別表示拿到來自一號碗的普通餅乾、來自二號碗的普通餅乾的機率
  • P(E|H1)P(H1) + P(E|H2)P(H2) – 表示拿到普通餅乾的機率

在咱們拿到餅乾前,咱們會選到一號碗的機率是先驗機率 P(H1),在拿到了餅乾後,咱們要獲得是後驗機率 P(H1|E)學習

特徵條件獨立假設

這一部分開始樸素貝葉斯的理論推導,從中你會深入地理解什麼是特徵條件獨立假設。測試

給定訓練數據集(X,Y),其中每一個樣本x都包括n維特徵,即x=(x1,x2,x3,...,xn),類標記集合含有k種類別,即y=(y1,y2,...,yk)this

若是如今來了一個新樣本x,咱們要怎麼判斷它的類別?從機率的角度來看,這個問題就是給定x,它屬於哪一個類別的機率最大。那麼問題就轉化爲求解P(y1|x),P(y2|x),...,P(yk|x)中最大的那個,即求後驗機率最大的輸出:argmaxykP(yk|x)atom

P(yk|x)怎麼求解?答案就是貝葉斯定理:


根據全機率公式,能夠進一步地分解上式中的分母:

    【公式1】

先無論分母,分子中的P(yk)

是先驗機率,根據訓練集就能夠簡單地計算出來。

而條件機率P(x|yk)=P(x1,x2,...,xn|yk)

它的參數規模是指數數量級別的,假設第i維特徵 xi可取值的個數有 Si個,類別取值個數爲k個,那麼參數個數爲: kni=1Si

這顯然不可行。針對這個問題,樸素貝葉斯算法對條件機率分佈做出了獨立性的假設,通俗地講就是說假設各個維度的特徵x1,x2,...,xn互相獨立,在這個假設的前提上,條件機率能夠轉化爲:

【公式2】

這樣,參數規模就降到ni=1Sik

以上就是針對條件機率所做出的特徵條件獨立性假設,至此,先驗機率P(yk)

和條件機率 P(x|yk)的求解問題就都解決了,那麼咱們是否是能夠求解咱們所要的後驗機率 P(yk|x)了?

答案是確定的。咱們繼續上面關於P(yk|x)

的推導,將【公式2】代入【公式1】獲得:

因而樸素貝葉斯分類器可表示爲:



由於對全部的yk,上式中的分母的值都是同樣的(爲何?注意到全加符號就容易理解了),因此能夠忽略分母部分,樸素貝葉斯分類器最終表示爲:


Naive Bayes Classifiers(樸素貝葉斯分類器)

在機器學習中,樸素貝葉斯分類器是一個基於貝葉斯定理的比較簡單的機率分類器,其中 naive(樸素)是指的對於模型中各個 feature(特徵) 有強獨立性的假設,並未將 feature 間的相關性歸入考慮中。

樸素貝葉斯分類器一個比較著名的應用是用於對垃圾郵件分類,一般用文字特徵來識別垃圾郵件,是文本分類中比較經常使用的一種方法。樸素貝葉斯分類經過選擇 token(一般是郵件中的單詞)來獲得垃圾郵件和非垃圾郵件間的關聯,再經過貝葉斯定理來計算機率從而對郵件進行分類。

由單個單詞分類郵件

假設可疑消息中含有「sex」這個單詞,平時大部分收到郵件的人都會知道,這封郵件多是垃圾郵件。然而分類器並不知道這些,它只能計算出相應的機率。假設在用戶收到的郵件中,「sex」出如今在垃圾郵件中的頻率是5%,在正常郵件中出現的機率是0.5%。

咱們用 S 表示垃圾郵件(spam),H 表示正常郵件(healthy)。二者的先驗機率都是50%,即:

P(S)=P(H)=50%

咱們用 W 表示這個詞,那麼問題就變成了計算 P(S|W) 的值,根據貝葉斯定理咱們能夠獲得


P(W|S)和P(W|H)的含義是,這個詞語在垃圾郵件和正常郵件中,分別出現的機率。經過計算能夠獲得 P(S|W) = 99.0%,說明「sex」的判斷能力很強,將50%的先驗機率提升到了99%的後驗機率。

結合獨立機率

大多數貝葉斯垃圾郵件分類器基於這樣的假設:郵件中的單詞是獨立的事件,實際上這種條件通常不被知足,這也是爲何被稱做樸素貝葉斯。這是對於應用情景的理想化,在此基礎上,咱們能夠經過貝葉斯定理獲得如下公式:


  • p 是可疑郵件是垃圾郵件的機率
  • pN 當郵件中包含第 Nth 個單詞時郵件是垃圾郵件的機率 p(S|WN)

對於輸出的機率,咱們將它和一個 threshold(閾值)相比較,小於閾值的是正常郵件,不然認爲它是垃圾郵件。



scikit-learn 樸素貝葉斯類庫概述

  樸素貝葉斯是一類比較簡單的算法,scikit-learn中樸素貝葉斯類庫的使用也比較簡單。相對於決策樹,KNN之類的算法,樸素貝葉斯須要關注的參數是比較少的,這樣也比較容易掌握。在scikit-learn中,一共有3個樸素貝葉斯的分類算法類。分別是GaussianNB,MultinomialNB和BernoulliNB。其中GaussianNB就是先驗爲高斯分佈的樸素貝葉斯,MultinomialNB就是先驗爲多項式分佈的樸素貝葉斯,而BernoulliNB就是先驗爲伯努利分佈的樸素貝葉斯。

這三個類適用的分類場景各不相同:

  • 高斯樸素貝葉斯:sklearn.naive_bayes.GaussianNB(priors=None) 用於樣本特徵的分佈大部分是連續值
  • 多項式樸素貝葉斯:sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)主要用於離散特徵分類,例如文本分類單詞統計,以出現的次數做爲特徵值
  • 伯努利樸素貝葉斯:sklearn.naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True,class_prior=None)相似於多項式樸素貝葉斯,也主要用戶離散特徵分類,和MultinomialNB的區別是:MultinomialNB以出現的次數爲特徵值,BernoulliNB爲二進制或布爾型特性


1. GaussianNB類使用總結

    GaussianNB假設特徵的先驗機率爲正態分佈,即以下式:



      其中 Ck爲Y的第k類類別。 μkσ2k 爲須要從訓練集估計的值

  GaussianNB會根據訓練集求出μkσ2kμk爲在樣本類別Ck中,全部Xj的平均值。σ2k爲在樣本類別Ck中,全部Xj的方差。

  GaussianNB類的主要參數僅有一個,即先驗機率priors ,對應Y的各個類別的先驗機率P(Y=Ck)。這個值默認不給出,若是不給出此時P(Y=Ck)=mk/m。其中m爲訓練集樣本總數量,mk爲輸出爲第k類別的訓練集樣本數。若是給出的話就以priors 爲準。

  高斯模型假設每一維特徵都服從高斯分佈(正態分佈):


μyk,i表示類別爲yk的樣本中,第i維特徵的均值。
σ2yk,i表示類別爲yk的樣本中,第i維特徵的方差。

    在使用GaussianNB的fit方法擬合數據後,咱們能夠進行預測。此時預測有三種方法,包括predict,predict_log_proba和predict_proba。 predict方法就是咱們最經常使用的預測方法,直接給出測試集的預測類別輸出。predict_proba則不一樣,它會給出測試集樣本在各個類別上預測的機率。容易理解,predict_proba預測出的各個類別機率裏的最大值對應的類別,也就是predict方法獲得類別。predict_log_proba和predict_proba相似,它會給出測試集樣本在各個類別上預測的機率的一個對數轉化。轉化後predict_log_proba預測出的各個類別對數機率裏的最大值對應的類別,也就是predict方法獲得類別。

     當特徵是連續變量的時候,運用多項式模型就會致使不少P(xi|yk)=0(不作平滑的狀況下),此時即便作平滑,所獲得的條件機率也難以描述真實狀況。因此處理連續的特徵變量,應該採用高斯模型。

    

下面是一組人類身體特徵的統計資料。

性別 身高(英尺) 體重(磅) 腳掌(英寸)
6 180 12
5.92 190 11
5.58 170 12
5.92 165 10
5 100 6
5.5 150 8
5.42 130 7
5.75 150 9

已知某人身高6英尺、體重130磅,腳掌8英寸,請問該人是男是女?
根據樸素貝葉斯分類器,計算下面這個式子的值。

P(身高|性別) x P(體重|性別) x P(腳掌|性別) x P(性別)
      困難在於,因爲身高、體重、腳掌都是連續變量,不能採用離散變量的方法計算機率。並且因爲樣本太少,因此也沒法分紅區間計算。怎麼辦?
      這時,能夠假設男性和女性的身高、體重、腳掌都是正態分佈,經過樣本計算出均值和方差,也就是獲得正態分佈的密度函數。有了密度函數,就能夠把值代入,算出某一點的密度函數的值。

      好比,男性的身高是均值5.85五、方差0.035的正態分佈。因此,男性的身高爲6英尺的機率的相對值等於1.5789(大於1並無關係,由於這裏是密度函數的值,只用來反映各個值的相對可能性)


對於腳掌和體重一樣能夠計算其均值與方差。有了這些數據之後,就能夠計算性別的分類了。

P(身高=6|男) x P(體重=130|男) x P(腳掌=8|男) x P(男) = 6.1984 x e-9   P(身高=6|女) x P(體重=130|女) x P(腳掌=8|女) x P(女) = 5.3778 x e-4
  • 1
  • 2
  • 3
  • 4

能夠看到,女性的機率比男性要高出將近10000倍,因此判斷該人爲女性。

2. MultinomialNB類使用總結

    MultinomialNB假設特徵的先驗機率爲多項式分佈,即以下式:

   

    其中,P(Xj=xjl|Y=Ck)是第k個類別的第j維特徵的第l個個取值條件機率。mk是訓練集中輸出爲第k類的樣本個數。λ

爲一個大於0的常數,經常取爲1,即拉普拉斯平滑。也能夠取其餘值。

    MultinomialNB參數比GaussianNB多,可是一共也只有僅僅3個。其中,參數alpha即爲上面的常數λ,若是你沒有特別的須要,用默認的1便可。若是發現擬合的很差,須要調優時,能夠選擇稍大於1或者稍小於1的數。布爾參數fit_prior表示是否要考慮先驗機率,若是是false,則全部的樣本類別輸出都有相同的類別先驗機率。不然能夠本身用第三個參數class_prior輸入先驗機率,或者不輸入第三個參數class_prior讓MultinomialNB本身從訓練集樣原本計算先驗機率,此時的先驗機率爲P(Y=Ck)=mk/m。其中m爲訓練集樣本總數量,mk爲輸出爲第k類別的訓練集樣本數。

  在使用MultinomialNB的fit方法或者partial_fit方法擬合數據後,咱們能夠進行預測。此時預測有三種方法,包括predict,predict_log_proba和predict_proba。因爲方法和GaussianNB徹底同樣,這裏就不累述了。

多項式模型在計算先驗機率P(yk)和條件機率P(xi|yk)時,會作一些平滑處理,具體公式爲:


N是總的樣本個數,k是總的類別個數,Nyk是類別爲yk的樣本個數,α是平滑值。


Nyk是類別爲yk的樣本個數,n是特徵的維數,Nyk,xi是類別爲yk的樣本中,第i維特徵的值是xi的樣本個數,α是平滑值。

α=1時,稱做Laplace平滑,當0<α<1時,稱做Lidstone平滑,α=0時不作平滑。

若是不作平滑,當某一維特徵的值xi

沒在訓練樣本中出現過期,會致使P(xi|yk)=0,從而致使後驗機率爲0。加上平滑就能夠克服這個問題。


2.1 舉例

有以下訓練數據,15個樣本,2維特徵X1,X2

,2種類別-1,1。給定測試樣本 x=(2,S)T

,判斷其類別。

這裏寫圖片描述

解答以下:

運用多項式模型,令α=1

  • 計算先驗機率

這裏寫圖片描述

  • 計算各類條件機率

這裏寫圖片描述

  • 對於給定的x=(2,S)T計算:

這裏寫圖片描述

由此能夠斷定y=-1。


3. BernoulliNB類使用總結

    BernoulliNB假設特徵的先驗機率爲二元伯努利分佈,即以下式:


         此時l只有兩種取值。xjl只能取值0或者1。

   BernoulliNB一共有4個參數,其中3個參數的名字和意義和MultinomialNB徹底相同。惟一增長的一個參數是binarize。這個參數主要是用來幫BernoulliNB處理二項分佈的,能夠是數值或者不輸入。若是不輸入,則BernoulliNB認爲每一個數據特徵都已是二元的。不然的話,小於binarize的會歸爲一類,大於binarize的會歸爲另一類。

  在使用BernoulliNB的fit或者partial_fit方法擬合數據後,咱們能夠進行預測。此時預測有三種方法,包括predict,predict_log_proba和predict_proba。因爲方法和GaussianNB徹底同樣,這裏就不累述了。

        與多項式模型同樣,伯努利模型適用於離散特徵的狀況,所不一樣的是,伯努利模型中每一個特徵的取值只能是1和0(以文本分類爲例,某個單詞在文檔中出現過,則其特徵值爲1,不然爲0).

伯努利模型中,條件機率P(xi|yk)的計算方式是:

當特徵值xi爲1時,P(xi|yk)=P(xi=1|yk)

當特徵值xi爲0時,P(xi|yk)=1P(xi=1|yk)

       伯努利模型和多項式模型是一致的,BernoulliNB須要比MultinomialNB多定義一個二值化的方法,該方法會接受一個閾值並將輸入的特徵二值化(1,0)。固然也能夠直接採用MultinomialNB,但須要預先將輸入的特徵二值化。

  

參考:

相關文章
相關標籤/搜索