2014-03-28 68 views
0

我想實現我的第一個垃圾郵件過濾器使用樸素貝葉斯分類器。我正在使用UCI機器學習數據庫(http://archive.ics.uci.edu/ml/datasets/SMS+Spam+Collection)提供的數據。數據是與幾千個垃圾郵件和非垃圾郵件(火腿)消息相對應的功能表。因此,我的功能僅限於桌面提供的功能。天真的垃圾郵件過濾

我的目標是實現一個分類器,可以計算P(S|M),垃圾郵件被髮送的概率。到目前爲止,我一直在使用下面的公式來計算P(S | F),即給出一個特徵的垃圾郵件的概率。

P(S|F)= P(F|S)/從http://en.wikipedia.org/wiki/Bayesian_spam_filtering

(P(F|S)+ P(F|H))

其中P(F|S)的概率給定垃圾郵件的特徵和P(F|H)是給出火腿特徵的概率。我無法彌補知道P(S | F)到P(S | M)的差距,其中M是消息,而消息只是一個獨立的功能包。

一眼望去,我只想將這些特徵放在一起。但那會使大多數數字非常小,我不確定這是否正常。

總之,這些是我現在的問題。
1.)如何將一組P(S | F)取到P(S | M)。 2.)一旦計算了P(S|M),我如何爲我的分類器定義一個閾值? 3.)幸運的是,我選擇了我的功能集,我將如何去選擇或找到我自己的功能集?

我也很感謝那些可能幫助我的資源。謝謝你的時間。

回答

0

你想用樸素貝葉斯:

http://en.wikipedia.org/wiki/Naive_Bayes_classifier

  1. 這可能超出了這個答案來解釋它的範圍,但實際上你乘各的概率特點給垃圾郵件一起,繁衍即由垃圾郵件的先驗概率。然後重複火腿(即將每個火腿放在一起,然後乘以火腿的先驗概率)。現在你有兩個數字,可以用概率除以兩者的總和來歸一化。這會給你S | M和S | H的概率。再次閱讀上面的文章。如果您想避免數值下溢,請記錄每個條件和先驗概率(任何基數)的對數並添加,而不是乘以原始概率。添加日誌相當於乘以原始數字。這最終不會給你一個概率數字,但你仍然可以把預測的類別作爲一個更大的值。

  2. 您不需要設置閾值,只需根據更可能發生的情況,垃圾郵件或火腿(或哪個給您更高的對數似然值)對每個實例進行分類即可。

  3. 有沒有簡單的答案。使用一袋文字模型對於這個問題是合理的。避免非常罕見(發生在< 5文檔中)以及非常頻繁的詞語,如the和a。停用詞列表通常用於刪除這些詞。特徵選擇算法也可以提供幫助。去除高度相關的特徵將會有所幫助,特別是對於對此非常敏感的樸素貝葉斯。