久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

PGM學(xué)習(xí)之三 樸素貝葉斯分類器(Naive Bayes Classifier)

 學(xué)海無涯GL 2014-05-16

         介紹樸素貝葉斯分類器的文章已經(jīng)很多了,。本文的目的是通過基本概念和微小實(shí)例的復(fù)述,,鞏固對(duì)于樸素貝葉斯分類器的理解。

一 樸素貝葉斯分類器基礎(chǔ)回顧

        樸素貝葉斯分類器基于貝葉斯定義,,特別適用于輸入數(shù)據(jù)維數(shù)較高的情況,。雖然樸素貝葉斯分類器很簡(jiǎn)單,但是它確經(jīng)常比一些復(fù)雜的方法表現(xiàn)還好,。

                                                           

       為了簡(jiǎn)單闡述貝葉斯分類的基本原理,,我們使用上圖所示的例子來說明。作為先驗(yàn),,我們知道一個(gè)球要么是紅球要么是綠球,。我們的任務(wù)是當(dāng)有新的輸入(New Cases)時(shí),我們給出新輸入的物體的類別(紅或者綠),。這是貝葉斯分類器的典型應(yīng)用-Label,,即給出物體標(biāo)記。

        從圖中我們 還看到,,綠球的數(shù)量明顯比紅球大,,那么我們有理由認(rèn)為:一個(gè)新輸入(New case)更有可能是綠球。假如綠球的數(shù)量是紅球的二倍,,那么對(duì)于一個(gè)新輸入,,它是綠球的概率是它是紅球的概率的二倍。

        因此,,我們知道:

                                                

         假設(shè)一共有60個(gè)球,,其中40個(gè)是綠球,20個(gè)是紅球,,那么類別的先驗(yàn)概率為:

                                                

                                              

       有了先驗(yàn)概率之后,,我們就可以準(zhǔn)備對(duì)新來的物體(New Object),圖中白色圈所示,進(jìn)行分類,。如果要取得比較準(zhǔn)確的分類結(jié)果,,那么我們猜測(cè)它是綠球比較保險(xiǎn),也就是新物體與綠球的likelihood比與紅球的likelihood更大,。那么我們接下來衡量這種相似性-likelihood(似然),。

                                               

                                             

         通過上面的公式,我們可以看出X是綠球的似然比X是紅球的似然小,,因?yàn)樵赬周圍鄰域內(nèi),,有3個(gè)紅球但是只有1個(gè)綠球。因此:

                                          

                                       

        因此,,盡管對(duì)于先驗(yàn)概率來說,,X是綠球的可能性比其是紅球的可能性大,但是似然(Likelihood)表現(xiàn)的結(jié)果卻相反,。在貝葉斯分析中,,最后的類別是有上述兩個(gè)概率 (先驗(yàn)和似然),這就是貝葉斯準(zhǔn)則:

                                       

          注:在實(shí)際使用時(shí),,概率要經(jīng)過歸一化(Normalized),。

二 技術(shù)推廣

         對(duì)于一組變量X={x1,x2,x3,,,,,,xd},我們希望構(gòu)造輸出C={c1,c2,c3,,,,,cd}的一個(gè)具體取值Cj(比如Cj是一個(gè)分類的情況)的先驗(yàn)概率,。利用貝葉斯定理可知:

                                      

        此處p(Cj|x1,x2,,,,,xd)就是Cj的顯眼高鋁,,或者說是X屬于Cj這類的概率。樸素貝葉斯假設(shè)相互獨(dú)立變量的條件概率也相互獨(dú)立,。因此:

                                      

       并且,,先驗(yàn)可以寫成如下的形式:

                                     

      通過貝葉斯定義,我們可以在類別向量Cj的條件下估計(jì)X的類別標(biāo)簽,。

     樸素貝葉斯模型可以通過多種形式建模:正態(tài)分布,,log正態(tài)分布,gamma分布和泊松分布(poisson)

                             

      注:此處的泊松分布被認(rèn)為連續(xù)分布,,當(dāng)變量是離散值的時(shí)候另作處理,。


三 例子

         假設(shè)我們已經(jīng)有如下數(shù)據(jù):

    

        這些數(shù)據(jù)可以歸納如下:

    

    那么,對(duì)于一組新數(shù)據(jù):

    

    我們來計(jì)算兩類的似然:

           "yes" = 2/9 * 3/9 * 3/9 * 3/9 * 9/14 = 0.0053
           "no" = 3/5 * 1/5 * 4/5 * 3/5 * 5/14 = 0.0206
    歸一化:
          P("yes") = 0.0053 / (0.0053 + 0.0206) = 0.205
          P("no") = 0.0206 / (0.0053 + 0.0206) = 0.795

   那么,,結(jié)論是我們今天 Not play,。


四  代碼

  1. <span style="font-size:12px;">from __future__ import division  
  2.   
  3. def calc_prob_cls(train, cls_val, cls_name='class'):  
  4.     ''''' 
  5.     calculate the prob. of class: cls 
  6.     '''  
  7.     cnt = 0  
  8.     for e in train:  
  9.         if e[cls_name] == cls_val:  
  10.             cnt += 1  
  11.   
  12.     return cnt / len(train)  
  13.   
  14. def calc_prob(train, cls_val, attr_name, attr_val, cls_name='class'):  
  15.     ''''' 
  16.     calculate the prob(attr|cls) 
  17.     '''  
  18.     cnt_cls, cnt_attr = 0, 0  
  19.     for e in train:  
  20.         if e[cls_name] == cls_val:  
  21.             cnt_cls += 1  
  22.             if e[attr_name] == attr_val:  
  23.                 cnt_attr += 1  
  24.   
  25.     return cnt_attr / cnt_cls  
  26.   
  27. def calc_NB(train, test, cls_y, cls_n):  
  28.     ''''' 
  29.     calculate the naive bayes 
  30.     '''  
  31.     prob_y = calc_prob_cls(train, cls_y)  
  32.     prob_n = calc_prob_cls(train, cls_n)  
  33.     for key, val in test.items():  
  34.         print '%10s: %s' % (key, val)  
  35.         prob_y *= calc_prob(train, cls_y, key, val)  
  36.         prob_n *= calc_prob(train, cls_n, key, val)  
  37.           
  38.     return {cls_y: prob_y, cls_n: prob_n}  
  39.   
  40. if __name__ == '__main__':  
  41.     #train data  
  42.     train = [  
  43.         {"outlook":"sunny", "temp":"hot", "humidity":"high", "wind":"weak", "class":"no" },  
  44.         {"outlook":"sunny", "temp":"hot", "humidity":"high", "wind":"strong", "class":"no" },  
  45.         {"outlook":"overcast", "temp":"hot", "humidity":"high", "wind":"weak", "class":"yes" },  
  46.         {"outlook":"rain", "temp":"mild", "humidity":"high", "wind":"weak", "class":"yes" },  
  47.         {"outlook":"rain", "temp":"cool", "humidity":"normal", "wind":"weak", "class":"yes" },  
  48.         {"outlook":"rain", "temp":"cool", "humidity":"normal", "wind":"strong", "class":"no" },  
  49.         {"outlook":"overcast", "temp":"cool", "humidity":"normal", "wind":"strong", "class":"yes" },  
  50.         {"outlook":"sunny", "temp":"mild", "humidity":"high", "wind":"weak", "class":"no" },  
  51.         {"outlook":"sunny", "temp":"cool", "humidity":"normal", "wind":"weak", "class":"yes" },  
  52.         {"outlook":"rain", "temp":"mild", "humidity":"normal", "wind":"weak", "class":"yes" },  
  53.         {"outlook":"sunny", "temp":"mild", "humidity":"normal", "wind":"strong", "class":"yes" },  
  54.         {"outlook":"overcast", "temp":"mild", "humidity":"high", "wind":"strong", "class":"yes" },  
  55.         {"outlook":"overcast", "temp":"hot", "humidity":"normal", "wind":"weak", "class":"yes" },  
  56.         {"outlook":"rain", "temp":"mild", "humidity":"high", "wind":"strong", "class":"no" },  
  57.         ]     
  58.     #test data  
  59.     test = {"outlook":"sunny","temp":"cool","humidity":"high","wind":"strong"}  
  60.   
  61.     #calculate  
  62.     print calc_NB(train, test, 'yes', 'no')</span>  
 輸出為:
   outlook: sunny
     
      wind: strong
     
      temp: cool
 
         humidity: high
{'yes': 0.0052910052910052907, 'no': 0.020571428571428574}


     


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多