機器學習實戰(4)樸素貝葉斯學習筆記_20170707

機器學習之樸素貝葉斯實戰:
    樸素貝葉斯————基於貝葉斯定理與特徵條件獨立假設的分類方法
    對於給定數據集,首先計算基於特徵條件獨立假設學習輸入/輸出的聯合概率分佈;然後基於此模型,對給定的輸入x,利用貝葉斯定理求出
後驗概率最大的輸出y。
    用p1(x,y)表示數據(x,y)屬於類別1的概率
    用p2(x,y)表示數據(x,y)屬於類別2的概率
    如果p1>p2,那麼類別爲1;反之,類別爲2

    推廣: argmax p(ci   | x,y),使後驗概率最大的ci,則(x,y)就屬於ci類

其中源碼第49~55行理解:

def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):
    p1 = sum(vec2Classify * p1Vec) + log(pClass1)   
    p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1)
    if p1 > p0:
        return 1
    else: 
        return 0
這是貝葉斯分類函數的代碼

四個輸入:要分類的向量vec2Classify 以及貝葉斯訓練函數計算得到的三個概率值;

其中vec2Classify得到方式

    testEntry = ['love', 'my', 'dalmation']                                         # 測試樣本
    thisDoc = array(setOfWords2Vec(myVocabList, testEntry))    # setOfWordsVec函數用來檢查測試樣本是否在訓練的詞組中
    print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb)   # thisDoc = vec2Classify 這時是一個{0,1}集合的數組
接下來解釋 p1和p0的計算

   p1 = sum(vec2Classify * p1Vec) + log(pClass1)   
   p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1)
已知:p( ci | w ) = p( w | ci ) * p( ci ) / p( w )

因爲p( w )是定量,所以要求使之值最大的ci,即求p( w | ci ) * p ( ci )的最大值

分類函數中 ci = {0,1} 由於樸素貝葉斯假設所有特徵都相互獨立,則有

p( w | ci) = p( w0, w1, ... , wn | ci) = p( w0 | ci ) * p( w1 | ci ) * .... * p( wn | ci )

取對數(不影響函數單調性):

ln p ( w | ci)  = sum ( ln p( wn | ci ))    ( n = 1, 2, .... )

所有原式取對數,ln( p( w | ci) * p( ci ) ) = sum ( ln p( wn | ci) ) + ln p( ci )

p(1) = pClass1 所以 p(0) = 1 - pClass1


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