[Python]實作單純貝氏分類器(Naive Bayes Classifier),並應用於垃圾訊息分類

邱秉誠
Carrot Cheng的數據分析
Aug 26, 2020

--

貝氏定理是機率論的一種定理,描述在已知某些條件下,計算某個特定事件發生的機率為何。例如已知某條訊息包含「優惠」這個單詞,使用貝氏定理可以計算出為廣告訊息的機率,進而大幅提高過濾垃圾訊息的精準度,因此時常作為攔截垃圾信件的用途。

關於貝氏定理,可以參考這篇作為先備知識~。

貝氏定理

貝氏定理的核心公式如下:

注意藍色機率部分,上述其實就是條件機率互換的關係而已。在中學階段我們學過條件機率的公式是P(A|B)=P(A∩B)/P(B),意味著在事件B發生的條件下,事件A發生的機率,而我們將分子P(A∩B)依照條件機率公式替換成P(B|A)P(A),來達到條件機率的互換,如下。

經過上述的轉換不難發現貝氏定理其實就是從『給定A事件已發生的條件,B事件發生的條件機率』轉變成『給定B事件已發生的條件下,A事件發生的條件機率』的互換過程而已。公式用常理推斷符合生活上的經驗,比如在已知一個人抽菸,計算他得肺癌的機率,假設為P(肺癌|抽菸),如果得肺癌的人越多人有抽菸行為,也就是P(抽菸|肺癌)的值越大,則P(肺癌|抽菸)的值也會比較大。

詞袋模型(Bag-of-words model)

在正式進入主題之前,我們需要了解一個先備知識,它可以告訴我們如何計算特定類別出現某個單詞的機率。假設出現以下兩個信件標題

在不考慮文法及語詞順序的情況下,可以建構出下列不重複的語詞清單

[“開信”、”領取”、”限時”、”兩天”、”好禮”、”免費”、”折價券”]

我們重新用向量方式表達,對應的數字表示該單詞出現的次數

這就是詞袋模型一個簡單的例子,就像拿袋子裝下每個語詞,不考慮順序及文法。

假設如果要計算a類別信件出現特定語詞的條件機率,我們就先將a類別信件分詞,再用上述方式建構出詞袋模型,得到一組長長的一維向量,該單詞的次數,除以所有單詞的次數,就是該類別出現這個單詞的條件機率。

條件機率

--

--

邱秉誠
Carrot Cheng的數據分析

畢業於台大工業工程所,目前任職於台積電。