1. 程式人生 > >Machine Learning第六講[應用機器學習的建議] --(三)建立一個垃圾郵件分類器

Machine Learning第六講[應用機器學習的建議] --(三)建立一個垃圾郵件分類器

內容來自Andrew老師課程Machine Learning的第六章內容的Building a Spam Classifier部分。

一、Prioritizing What to Work on(優先考慮的工作)

在垃圾郵件分類的問題中,我們首先需要選出很多特徵,根據這些特徵使用訓練集訓練,然後使用驗證集驗證誤差,最後使用這個模型預測結果。 在這個問題中,輸入的x形式為: 也即:
Note:在郵件分類問題中,一般我們會選擇10000-20000個在訓練集中出現的比較頻繁的單詞。 怎樣能夠使垃圾分類器有更好的效能(最低的誤分類率)?一般可以從以下幾個方面入手: (1)收集更多的資料,如“honeypot”project可以用來發送垃圾郵件,這些郵件可以當做訓練集中的資料使用。
(2)找出基於路由資訊的更復雜的特徵(路由資訊在郵件的header中)。 (3)尋找郵件主題內容的更復雜的特徵,如:“discount”和“discounts”是否是同一個特徵?“deal”和“Dealer”是否是同一個特徵?以及標點符號特徵。 (4)找出更復雜的演算法來探測拼寫錯誤,如m0rtgage,medlcine,w4tches等。 雖然我們知道有這些方法,但是具體哪些方法有效,這個很難說清楚,需要根據實際情況考慮。

二、Error Analysis(誤差分析)

在學習的過程中,我們推薦的方法是(1)以一個簡單的專案開始,在訓練集上訓練,在驗證集上驗證。(2)畫出學習曲線幫助我們找出出現了什麼問題,怎麼解決,這部分內容參見
Machine Learning第六講[Advice for Applying Machine Learning] --(二)Diagnosing Bias vs. Variance
內容。(3)誤差分析:通過人工分析有多少資料被錯誤分類,並觀察被錯誤分類的郵件主要是哪些內容或者哪些類別的內容。
舉例: 驗證集具有500個數據,發現有100個數據被錯誤分類,通過手動檢測這100個錯誤分類的郵件,我們嘗試去發現:
(1)這些郵件是什麼型別的(type)? (2)哪些特徵可以幫助我們更好的分類這些郵件? 1、假設我們發現在這100個錯誤分類的郵件中, Phrama:12 Replica/fake:4 Steal passwords:53
Other:31 我們發現Steal passwords(竊取密碼)的這種郵件較多,那麼我們需要把時間主要花費在這個上面來研究是否通過設計特徵或者其他的方法來減小Steal passwords郵件的誤分類率。 2、假如我們發現在這100個錯誤分類的郵件中, Deliberate misspellings(m0rgage,medlcine,etc.):5 Unusual email routing:16 Unusual(Spamming) puctuation:32 我們發現拼寫錯誤的比較少,因此我們沒有必要把時間耗費在研究拼寫錯誤上面。 我們知道了面對較高的誤分類率我們應該怎麼做,那麼我們怎樣衡量這麼做是否有用呢?這就需要引入數值評估的內容了。 因為我們不能直接看出我們的方法對提高系統性能是否有幫助,唯一的辦法就是利用量化的數值評估 比如,我們來衡量詞幹提取器有沒有作用: 若在使用詞幹提取器之前誤差率為5%,使用詞幹提取器之後誤差率為3%,則說明提取器是有作用的(在後續學習中,這個評判資料還需要一些處理)。