做了一個多月的畢設,《釣魚郵件檢測方法的設計與實現》。
主要參考的是12年南郵學報上發的的一篇論文《基於文本特征分析的釣魚郵件檢測》,說是說基於文本特征分析,其實就是用機器學習的方法實現釣魚郵件的檢測。
主要實現流程為:釣魚郵件特征選擇;編寫特征提取算法;編寫機器學習分類器的訓練算法代碼和檢測代碼;對模型進行測試。
特征選擇:
特征的選擇參考的是上述論文中選擇的特征,再通過自己的分析修改了一些。其實做到最后發現這些特征里面,郵件是否含有html類型語言占了很大的比重,其他的特征占得比重特別小,可能是跟郵件訓練樣本集有關。釣魚郵件的訓練和測試樣本集和上述論文中使用的一樣,年份有些久遠,都是零幾年收集的數據,但實在找不到其他的樣本集了。
特征提取的代碼都是自己敲出來的,參考的論文里給了一些偽代碼。特征提取用到的核心知識是正則表達式,聽起來挺玄乎的東西,但其實也不是很難。不是很難不代表它不博大精深,入門容易,精通很難。
機器學習分類器實現:
實現了三種分類器,LR、朴素貝葉斯、決策樹。都是用Python寫的,LR和朴素貝葉斯是直接按照算法,用代碼實現的(當然不是我實現的),決策樹用的是python機器學習的第三方庫。決策樹也有使用代碼實現算法的例子,但是我沒成功移植到我的系統里來,所以就走了個捷徑。LR和貝葉斯開始都是找的博客文章,后來發現那些博客文章里面的代碼都是來自於《機器學習實戰》這本書,后續可以好好看看這本書。
檢測模型測試:
用monkey.org提供的1000封釣魚郵件和spamassassin提供的1000封普通郵件作訓練集,500封釣魚郵件和500封普通郵件作測試集,檢測性能十分的好,甚至比論文里面的結果都好。但個人覺得我寫的這個模型沒有什么實際意義,因為樣本集郵件數據的現實參考性實在太低。不過如果它參考性強的話檢測性能肯定達不到這么高。
總結:
這次畢設課題經歷總體來說還是讓我受益匪淺的。考完研寒假在家無聊看了吳恩達教授的機器學習公開課(雖然沒看完),沒想到畢設就用上了。熟悉了python語言(python真是一門強大的語言,包容性賊高,不像C那么龜毛),接觸了正則表達式,對機器學習里面的分類算法有了深刻的理解(雖然算法的代碼實現不是自己寫的,但是基本理清了它們的實現思路)。
展望:
馬上要從一枚本科渣渣轉戰為研究生了,希望自己研究生能多學點東西,以后找工作不至於太虛。
畢設告一段落(其實還有論文修改、查重和答辯。。。),接下來想把《機器學習實戰》這本書給好好看看,有時間接觸一下Android編程,熟悉熟悉Java,感覺自己都忘光了。其實覺得應該把吳恩達Learning Machine的公開課給看完的,做人要有始有終嘛,但是真心看的費勁,再說吧。
希望自己不是僅僅做個展望,能落到實處!