機器學習實戰-邊學邊讀python程式碼(5)

harlanc發表於2015-12-15

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

 

注意:

p1Vect = log(p1Num/p1Denom)
p0Vect = log(p0Num/p0Denom)

 

>>> p0V
array([ 0.04166667, 0.04166667, 0.04166667, 0. , 0. ,
.
.
0.04166667, 0. , 0.04166667, 0. , 0.04166667,
0.04166667, 0.125 ])
>>> p1V
array([ 0. , 0. , 0. , 0.05263158, 0.05263158,
.
.
0. , 0.15789474, 0. , 0.05263158, 0. ,
0. , 0. ])

 

 

 

p(w0,w1,w2..wN|ci) = p(w0|ci)p(w1|ci)p(w2|ci)…p(wN|ci),

 

在本例中,ci分為侮辱性和非侮辱性兩個類別,而w0,w1,w2..wN為單詞向量(文件中所有單詞的彙總),p0V和p1V是由訓練文件計算出來的,如果文件為侮辱性文件,統計文件中各個詞語在單詞向量中出現情況,計算出概率向量p0V,同樣計算出p1V.

貝葉斯定理如下:

p(ci|w)

= p(w|ci)p(ci)/p(w)

=p(w0,w1,w2..wN|ci)p(ci)/p(w)

=p(w0|ci)p(w1|ci)p(w2|ci)..p(wN|ci)p(ci)/p(w)

計算一個特定的文件w屬於c0(侮辱性文件)或者c1(非侮辱性文件),統計這篇文件中各個單詞在兩個不同類別中的出現概率,由貝葉斯公式進行量化,也就是把特定文件中的每個單詞在p0V或者p1V中找到對應的單詞概率,把這些概率相乘,即p(w0|ci)p(w1|ci)p(w2|ci)..p(wN|ci),再乘以p(ci),最後的結果得出兩個概率值,概率大的即為特定文件最後的類別。

 



作者:
HarlanC

部落格地址:
http://www.cnblogs.com/harlanc/

個人部落格:
http://www.harlancn.me/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出,
原文連結

如果覺的博主寫的可以,收到您的贊會是很大的動力,如果您覺的不好,您可以投反對票,但麻煩您留言寫下問題在哪裡,這樣才能共同進步。謝謝!


相關文章