最近跟同僚學習了下用樸素貝葉斯來做一個簡單的廣告識别的功能,對我學習過程做了下記錄
什麼是樸素貝葉斯
樸素貝葉斯定理是指當事件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)
當然文中主要講解樸素貝葉斯定理,是以我們假設詞的出現時互相獨立的,事實上并不是獨立的,畢竟語言博大精深