李偉 羊巍 劉志芳
摘要:由于垃圾郵件的數(shù)量的增長,對(duì)郵件進(jìn)行分類已經(jīng)成為亟待解決的問題。本文提出一種基于機(jī)器學(xué)習(xí)的中文郵件分類方法,采用樸素貝葉斯算法對(duì)郵件進(jìn)行處理。實(shí)驗(yàn)結(jié)果表明,該方法對(duì)垃圾郵件判定結(jié)果的準(zhǔn)確率較高。
關(guān)鍵詞:機(jī)器學(xué)習(xí);郵件分類;樸素貝葉斯
中文分類號(hào):TP391.3 ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)34-0185-02
Abstract: With the increase of spam, it has become an urgent problem to classify email. This paper proposes a Chinese email classification method based on machine learning, which uses naive Bayesian algorithm to process emails. The experimental results show that the method has a high accuracy for spam detection results.
Keywords: Machine learning; Email Classification; naive Bayes
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,電子郵件的應(yīng)用越來越普及,然而垃圾郵件的出現(xiàn)給用戶帶來了困擾,因此如何有效地辨別并過濾垃圾郵件變得十分必要。機(jī)器學(xué)習(xí)[1]是根據(jù)已知數(shù)據(jù)不斷學(xué)習(xí)和積累經(jīng)驗(yàn),總結(jié)出規(guī)律并用來預(yù)測未知數(shù)據(jù)的屬性,在數(shù)據(jù)挖掘領(lǐng)域有著十分廣泛的應(yīng)用。文獻(xiàn)[2]提出了一種基于神經(jīng)網(wǎng)絡(luò)和決策樹進(jìn)行文本分類方法,文獻(xiàn)[3]提出了基于互信息的加權(quán)樸素貝葉斯進(jìn)行文本分類的算法。本文使用樸素貝葉斯算法對(duì)中文郵件進(jìn)行分類,從大量郵件中找出垃圾郵件。
1 樸素貝葉斯算法
郵件分類結(jié)果評(píng)價(jià)標(biāo)準(zhǔn)是準(zhǔn)確率[5],準(zhǔn)確率等于預(yù)測對(duì)的數(shù)與總數(shù)的比值,計(jì)算公式為:
式中,A表示準(zhǔn)確率,TP表示把正類預(yù)測為正類數(shù),TN表示把負(fù)類預(yù)測為負(fù)類數(shù),F(xiàn)N表示把正類預(yù)測為負(fù)類數(shù),F(xiàn)P表示把負(fù)類預(yù)測為正類數(shù)。
2 中文郵件分類
使用樸素貝葉斯算法對(duì)中文郵件進(jìn)行分類,如果郵件中包含“發(fā)票”“電話”或“促銷”等詞匯,并且這些詞匯出現(xiàn)比率較高時(shí),那么這封郵件為垃圾郵件的概率要比不包含這些詞匯的郵件要大得多。本文使用Python語言的數(shù)據(jù)分析與機(jī)器學(xué)習(xí)開源庫sklearn,在其擴(kuò)展子庫naive_bayes中,提供了三種樸素貝葉斯算法,分別為伯努利樸素貝葉斯、高斯樸素貝葉斯和多項(xiàng)式樸素貝葉斯,本文選擇使用多項(xiàng)式樸素貝葉斯算法MultinomialNB進(jìn)行郵件分類。使用樸素貝葉斯算法對(duì)電子郵件進(jìn)行分類的步驟如圖1所示,共分為六個(gè)過程。
Step 1:從郵箱中收集大量的正常郵件和垃圾郵件作為訓(xùn)練集;
Step 2:讀取訓(xùn)練集內(nèi)容進(jìn)行預(yù)處理后,進(jìn)行中文分詞,保留有效詞匯;
Step 3:統(tǒng)計(jì)訓(xùn)練集中每個(gè)詞匯出現(xiàn)的次數(shù),選取出現(xiàn)次數(shù)最多的前N個(gè)詞匯;
Step 4:計(jì)算前N個(gè)詞匯在正常郵件和垃圾郵件中出現(xiàn)的頻率,并生成對(duì)應(yīng)的特征向量,每個(gè)分量的值表示對(duì)應(yīng)詞匯在該郵件中出現(xiàn)的次數(shù);
Step 5:根據(jù)每個(gè)郵件的特征向量和郵件的已知分類創(chuàng)建并訓(xùn)練樸素貝葉斯模型;
Step 6:對(duì)測試集郵件進(jìn)行預(yù)處理后提取特征向量,使用訓(xùn)練好的樸素貝葉斯模型對(duì)測試郵件進(jìn)行分類。
3 實(shí)驗(yàn)與分析
實(shí)驗(yàn)的數(shù)據(jù)為200封郵件,其中正常郵件100封,垃圾郵件100封,分別選取90封,共180封郵件作為訓(xùn)練集,剩下的20封作為測試集。實(shí)驗(yàn)采用Python編程實(shí)現(xiàn),中文分詞采用分詞器jieba,它內(nèi)置詞典,擁有50多萬個(gè)詞條。程序的關(guān)鍵代碼如下:
from numpy import np
from jieba import cut
from sklearn.naive_bayes import MultinomialNB
# 創(chuàng)建模型,使用訓(xùn)練集進(jìn)行訓(xùn)練
model = MultinomialNB()
model.fit(vectors, labels)
#使用模型對(duì)測試集進(jìn)行分類
result = model.predict(vectors)
實(shí)驗(yàn)結(jié)果如圖2所示,測試集共20封郵件(10封正常郵件、10封垃圾郵件),分類結(jié)果中將正常郵件預(yù)測為正常郵件數(shù)(TP)為10、將垃圾郵件預(yù)測為垃圾郵件數(shù)(TN)為9、將正常郵件預(yù)測為垃圾郵件數(shù)(FN)為0、將垃圾郵件預(yù)測為正常郵件數(shù)(FP)為1,計(jì)算得到實(shí)驗(yàn)結(jié)果的準(zhǔn)確率為95%,符合實(shí)驗(yàn)預(yù)期。
4 結(jié)束語
本文提出了一種基于樸素貝葉斯算法的中文郵件分類的方法,使用Python編寫程序進(jìn)行了實(shí)現(xiàn),最后通過實(shí)驗(yàn)結(jié)果表明該方法的可行性。下一步的研究工作是將該算法并行化,從而來提高系統(tǒng)對(duì)郵件分類的處理能力。
參考文獻(xiàn):
[1] 周志華. 機(jī)器學(xué)習(xí)[M]. 北京:清華大學(xué)出版社,2016.
[2] 雷飛. 基于神經(jīng)網(wǎng)絡(luò)和決策樹的文本分類及其應(yīng)用研究[D]. 成都:電子科技大學(xué),2018.
[3] ?武建軍,李昌兵.基于互信息的加權(quán)樸素貝葉斯文本分類算法[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用,2017(7).
[4] 梁志劍, 謝紅宇, 安衛(wèi)鋼. 基于BiGRU和貝葉斯分類器的文本分類[J]. 計(jì)算機(jī)工程與設(shè)計(jì),2020(2).
[5] 王行甫,杜婷. 基于屬性選擇的改進(jìn)加權(quán)樸素貝葉斯分類算法[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2015(8).
【通聯(lián)編輯:王力】