天天看點

樸素貝葉斯實作簡單廣告識别

最近跟同僚學習了下用樸素貝葉斯來做一個簡單的廣告識别的功能,對我學習過程做了下記錄

什麼是樸素貝葉斯

樸素貝葉斯定理是指當事件A與事件B互相獨立時P(A|B)=P(B|A)*P(A)/P(B),這個公式表示事件B發生的情況下事件A發生的機率等于事件A發生的機率乘以事件B發生的情況下事件A發生的機率再除以事件B發生的機率,此處不對公式進行推導

貝葉斯決策

假設我們有一堆朋友圈資料,存在兩類朋友圈内容,一類是廣告,一類是非廣告,他們的比例分别為P(ad),P(nor),我們去判斷一條新增的朋友圈内容是廣告還是非廣告。

若P(xad)>P(xnor)那麼就認為新出的朋友圈内容為廣告

若P(xnor)<P(xad)那麼就認為新出的朋友圈内容為非廣告

這就是貝葉斯決策論的核心思想,那P(xad)與P(xnor)怎麼計算呢,這裡就需要樸素貝葉斯定理了

實作廣告識别

一條朋友圈的内容裡面存在多個詞,我們用X表示x1,x2,x3…xn組成的向量,P(ad|x)表示新增朋友圈内容為廣告的機率,P(nor|x)表示新增朋友圈内容不是廣告的機率,那麼

P(nor|x)=P(x|nor)*P(nor)/P(x)

P(ad|x)=P(x|ad)*P(ad)/P(x)

若P(nor|x)>P(ad|x)則可認為新增朋友圈内容非廣告,若P(nor|x)<P(ad|x)則可認為新增朋友圈内容為廣告

假設每個詞都是條件獨立的,

P(nor|x)=P(x1|nor)*P(x2|nor)*P(x3|nor)*…*P(xn|nor)*P(nor)/[P(x1)*…P(xn)]

同理

P(ad|x)=P(x1|ad)*P(x2|ad)*P(x3|ad)*…*P(xn|ad)*P(ad)/[P(x1)*…P(xn)]

那麼我們隻需要對比P(x1|nor)*P(x2|nor)*P(x3|nor)*…*P(xn|nor)*P(nor)與P(x1|ad)*P(x2|ad)*P(x3|ad)*…*P(xn|ad)*P(ad)大小就可以對比出P(nor|x)與P(ad|x)的大小

P(nor)與P(ad)的值我們可以根據已有資料通過計算比例擷取

P(nor)=Count(nor)/Count(all)

P(ad)=Count(ad)/Count(all)

此時,我們隻需要關心P(x1|nor)…P(xn|nor)以及P(x1|ad)…P(xn|ad)的計算過程即可。

如上文所說的貝葉斯公式定理裡面的描述P(x1|nor)代表的是非廣告内容裡面詞x1出現的機率,那這個就很好計算了,我們先統計所有非廣告朋友圈的總數,再統計每條非廣告朋友圈内容裡面出現x1的次數,再以非廣告朋友圈内容總數裡的x1出現的次數除以非廣告朋友圈的數量即可

P(x1|nor)=Count(x1)/Count(nor)

當然文中主要講解樸素貝葉斯定理,是以我們假設詞的出現時互相獨立的,事實上并不是獨立的,畢竟語言博大精深

繼續閱讀