基於貝葉斯方法的垃圾郵件過濾工具

爲了應付人工智能大作業,做了一個簡單的垃圾郵件過濾工具,後來找到現成的語料(自己能找上千封分好類的郵件作爲資料再慢慢一封封解析不太容易,我又不是搞人工智能的),所以最後一共也就寫了300行代碼。

處理好的語料的包含類別信息+54個特徵詞在郵件中的出現情況,一共4000多封的內容信息。

郵件用多變量貝努力事件模型表示,說白了就是忽視單詞的頻率,每個詞在該郵件的情況,出現過置1,沒出現置0,相對於考慮頻率的各種模型和方法,這樣算是大大簡化了,但是資料說,其實這樣的效果也差不了多少,在小規模數據甚至更好。

很多論文中是以信息增益作爲特徵選擇排序的計算方法,計算公式也不復雜,至於我使用的spambase(http://www.ics.uci.edu/~mlearn/MLRepository.html)語料就不知道它是咋算的了,但是裏面給出的54個關鍵詞倒是有點奇怪,一些常用詞沒有,估計是做了一定優化處理,從關鍵詞感覺垃圾郵件大多是推銷商品的那種,可能我的工具代表性、推廣性一般般,最後用這麼簡單的方法,得到的過濾效率居然高於百分之90,也沒經過任何優化,還是有點意外的,不知道換一種語料情況如何。


至於其他細節也懶得記了,好久沒寫過Java,還是趕緊學起Java,主要記一些敲代碼碰到的小問題吧。


1.上來用JDBC連數據庫,告訴我Driver的類查不到,以前用數據庫好像沒印象要下個專門的mysql-jdbc-connection包,反正下了個導進去也就好了

2.通過sql語句查詢得到的結果集ResultSet,單個循環取值沒問題,用同一個Statement查詢得到2個ResultSet並交替取值,報錯說結果集關閉了,不能用一個Statement交替操作兩個,後來多聲明一個Statement也就行了

3.讀取一行文件時,最後可能多一個換行符

4.兩個整數相除時會自動將小數點後階段,並返回整數,所以計算30/1700一直給我得到0,哪怕你用浮點數賦值也沒用,先返回int,再幫你轉成double,所以必須將兩整數其一或是兩者都強制轉換爲浮點數,或者這樣在右側強轉float r1=(float)wrongNormal/normalNum;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章