,,
(1.湖南工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,湖南 株洲 412007;2.中南大學(xué) 自動(dòng)化學(xué)院,湖南 長(zhǎng)沙 410083)
近年來(lái),隨著網(wǎng)絡(luò)通信技術(shù)飛速發(fā)展,電子郵件成為人們?nèi)粘I詈凸ぷ鞯闹饕涣鞣绞街唬惓`]件問(wèn)題也隨之而來(lái)。異常郵件占用了大量的網(wǎng)絡(luò)資源,對(duì)互聯(lián)網(wǎng)中的用戶造成了巨大影響和威脅,甚至導(dǎo)致用戶損失數(shù)據(jù)和金錢。異常郵件破壞性強(qiáng)、傳播速度快、危害范圍廣,如何有效阻斷異常郵件的傳播,提高對(duì)異常郵件的判別能力是當(dāng)前研究的迫切要求。為了保護(hù)用戶的權(quán)益、減少網(wǎng)絡(luò)帶寬和資源的消耗,異常郵件的鑒別與過(guò)濾技術(shù)也逐漸受到研究者的重視。本文結(jié)合隨機(jī)森林算法的優(yōu)點(diǎn),突破郵件特征提取、分類及異常郵件檢測(cè)等關(guān)鍵技術(shù)難點(diǎn),并與典型的算法進(jìn)行實(shí)驗(yàn)對(duì)比分析,實(shí)驗(yàn)結(jié)果表明該方法在準(zhǔn)確率等方面具有明顯優(yōu)勢(shì)。
異常郵件概念自1978年提出以來(lái),全世界的專家學(xué)者對(duì)異常郵件檢測(cè)技術(shù)進(jìn)行研究與實(shí)踐,至今為止已取得了豐碩的研究成果。
郵件分類檢測(cè)方法大體可以分為兩類:基于IP地址的郵件檢測(cè)技術(shù)和基于內(nèi)容的郵件檢測(cè)技術(shù)[1]。在基于IP地址的郵件檢測(cè)技術(shù)中主要包括黑白名單檢測(cè)技術(shù)[2]、實(shí)時(shí)黑名單檢測(cè)技術(shù)以及主機(jī)名反向驗(yàn)證技術(shù)[3]等。實(shí)際應(yīng)用中,黑名單檢測(cè)技術(shù)和白名單檢測(cè)技術(shù)通常結(jié)合起來(lái)應(yīng)用于服務(wù)器。而基于內(nèi)容的異常郵件檢測(cè)技術(shù)是目前主流異常郵件檢測(cè)過(guò)濾技術(shù)。為了提高過(guò)濾效果,反異常郵件產(chǎn)品往往結(jié)合使用多種過(guò)濾技術(shù)[4-5]。
郵件的分類其實(shí)質(zhì)是對(duì)文本信息進(jìn)行處理,現(xiàn)有的K-近鄰、貝葉斯、神經(jīng)網(wǎng)絡(luò)、支持向量機(jī)、決策樹等經(jīng)典機(jī)器學(xué)習(xí)算法[6-9]被廣泛應(yīng)用到專利文本分類領(lǐng)域。于是,研究者試圖將對(duì)文本的處理方法引入郵件分類處理中,通過(guò)文本聚類或分類方法將郵件分為異常和正常兩類。但是與普通文本相比,郵件具有不一樣的特點(diǎn),它是一種非結(jié)構(gòu)化的文本,采用一般的文本分類算法和傳統(tǒng)的機(jī)器學(xué)習(xí)方法不能很好地區(qū)分正常和異常郵件,錯(cuò)誤率較高[10]。
為了緩解此問(wèn)題,在研究大量參考文獻(xiàn)的基礎(chǔ)上,課題組發(fā)現(xiàn)隨機(jī)森林(random forest,RF)算法是機(jī)器學(xué)習(xí)中一個(gè)可嘗試的精確分類算法[11-12],該算法由 Leo Breiman等在21世紀(jì)初提出[13]。它是一種利用多棵決策樹對(duì)樣本進(jìn)行訓(xùn)練并預(yù)測(cè)的分類器,與其他算法相比具有以下幾個(gè)方面的優(yōu)點(diǎn):1)具有通用性,適合多種環(huán)境,可用于聚類分析,引導(dǎo)無(wú)監(jiān)督聚類、異常檢測(cè)和數(shù)據(jù)透視等;2)不需要剪枝,相比單一決策樹算法不易產(chǎn)生過(guò)擬合;3)對(duì)異常值、噪聲數(shù)據(jù)不敏感,能保持良好的精確度;4)能提取高維數(shù)據(jù)的主要特征,可用于數(shù)據(jù)降維。本文在異常郵件中的過(guò)濾技術(shù)基礎(chǔ)上,結(jié)合隨機(jī)森林算法,設(shè)計(jì)并實(shí)現(xiàn)了異常郵件檢測(cè)方法。實(shí)驗(yàn)結(jié)果表明,該算法獲得了較高判別率。
本研究采用的方法在機(jī)器學(xué)習(xí)領(lǐng)域被稱作有監(jiān)督學(xué)習(xí)[14-15](supervised learning)方法,因此實(shí)現(xiàn)的流程也按照有監(jiān)督學(xué)習(xí)的基本步驟完成。有監(jiān)督學(xué)習(xí)是指用已知某種特性的樣本作為訓(xùn)練集,以建立一個(gè)數(shù)學(xué)模型再用已建立的模型來(lái)預(yù)測(cè)未知樣本,其流程如圖1所示。
圖1 整體流程圖Fig.1 Overall flow chart
如圖1所示,本文具體思路如下。
1)數(shù)據(jù)清洗。數(shù)據(jù)收集完畢后,由于數(shù)據(jù)集中可能存在無(wú)關(guān)或冗余信息,將影響郵件分類的精確度,有必要進(jìn)行數(shù)據(jù)清洗。具體步驟:根據(jù)indexFolder/indexFile索引文件對(duì)郵件數(shù)據(jù)集合(dataSet/data/…)處理,得到處理后的數(shù)據(jù)文件processxx_xxx到dataSet/processSet文件夾下,以及Result_process01到dataSet/firstResult文件夾下。
2)特征提取[16]。分別對(duì)獲取的郵件地址、郵件服務(wù)器數(shù)量、郵件發(fā)送時(shí)間及郵件內(nèi)容進(jìn)行特征提取,具體是:對(duì)Result_process01文件中數(shù)據(jù)進(jìn)行特征提取,生成數(shù)據(jù)文件Result_process02到dataSet/secondResult文件夾下,本文為了判斷郵件長(zhǎng)度對(duì)異常郵件信息量的影響,得到了在不同郵件長(zhǎng)度下異常郵件占比,以及在不同郵件長(zhǎng)度大小下郵件信息量的大小。
3)數(shù)據(jù)分割。將收集的郵件集按照比例分為測(cè)試集和訓(xùn)練集,并輸出到對(duì)應(yīng)的文件夾,具體是:對(duì)Result_process02文件進(jìn)行分割(train_test_split)得到x_train、x_test、y_test3個(gè)集合,分別對(duì)應(yīng)輸出到testSet文件夾下和trainSet文件夾下。
4)模型訓(xùn)練[17]。首先對(duì)訓(xùn)練集進(jìn)行詞頻權(quán)重計(jì)算(term frequency-inverse document frequency,tfidf)并做奇異值降解(singular value decomposition,SVD),構(gòu)建對(duì)應(yīng)的數(shù)據(jù)矩陣用來(lái)填充。
5)結(jié)果分析。經(jīng)過(guò)訓(xùn)練后,對(duì)分割好的測(cè)試集進(jìn)行預(yù)測(cè)得到結(jié)果并進(jìn)行對(duì)比,輸出結(jié)果圖以及結(jié)果表到result文件夾下。
算法的詳細(xì)流程如下。
本研究收集了近10 000封郵件,其中有異常郵件和非異常郵件,已通過(guò)索引文件對(duì)各個(gè)郵件分類,并且按照(spam../data/000/000 或者 ham../data/000/001,前者標(biāo)記為data/000/000是異常郵件,后者標(biāo)記為data/000/001是非異常郵件)格式存放,之后的數(shù)據(jù)處理利用索引文件中存放的信息定位到各個(gè)郵件,并獲取各個(gè)郵件數(shù)據(jù)。對(duì)于單一的文本信息類型郵件,每一封郵件都有著固定的格式(From為發(fā)送方,To為接收方,Date為日期,Content為具體內(nèi)容)。為了方便后續(xù)特征提取,此處按照郵件固定格式將所有郵件合并,每一封郵件內(nèi)所有信息按照固定格式排成一行(將一封郵件按照From、To、Date、Content的格式放在一行上),制作成二維表的形式合并到一個(gè)文本文件中。即從10 000封郵件文本中,將各個(gè)郵件文本按格式提取,之后壓縮到同一個(gè)文本文件中方便處理。
異常郵件的建模與過(guò)濾過(guò)程中,無(wú)法直接對(duì)異常郵件進(jìn)行過(guò)濾操作,首先需要對(duì)異常郵件進(jìn)行分析,找出一些關(guān)鍵元素,如詞、字或短詞等,從而提取郵件特征[18]。為了提高過(guò)濾效果,使用正則表達(dá)式對(duì)分詞后的郵件進(jìn)行二次處理[19]。對(duì)郵件數(shù)據(jù)集合處理完畢后,得到一個(gè)由二維表[20]填充的文本文檔。具體方法如下:
1)對(duì)郵件地址的提取。采用正則表達(dá)式re.findall(r"@([A-Za-z0-9]*.[A-Za-z0-9.]+)",str(str1))根據(jù)郵件格式獲取郵件地址。
2)對(duì)郵件服務(wù)器數(shù)量提取。str(df.xx_address.unique().shape)將獲取的郵件地址進(jìn)行歸一化處理,得到郵件收發(fā)服務(wù)器類別的數(shù)量。
3)對(duì)時(shí)間的提取。采用rex=r"([A-Za-z]+d?[AZa-z]*).*?(d{2}):d{2}:d{2}.*"提取時(shí)間。
同樣利用正則表達(dá)式根據(jù)格式對(duì)時(shí)間進(jìn)行提取,獲取的結(jié)果少數(shù)為none,另外一部分則根據(jù)時(shí)間段劃分(由于某一封郵件是否是異常郵件并不能僅根據(jù)一個(gè)準(zhǔn)確的時(shí)間來(lái)判斷,因此劃分不同時(shí)間段作為特征提取出來(lái))。
4)對(duì)內(nèi)容長(zhǎng)度提取。根據(jù)數(shù)據(jù)清洗完成后的文件,通過(guò)二維表格形式讀取,并獲取內(nèi)容列中不同的長(zhǎng)度,然后對(duì)不同長(zhǎng)度段分不同類型(由于某一封郵件是否是異常郵件并不能僅根據(jù)一個(gè)準(zhǔn)確的內(nèi)容長(zhǎng)度來(lái)判斷,因此劃分不同內(nèi)容長(zhǎng)度類型作為特征提取出來(lái)),此處將內(nèi)容長(zhǎng)度不大于10的劃分為0,不大于100的劃分為1,不大于500的劃分為2,不大于1 000的劃分為3,…,不大于50 000的劃分為13,否則為14。圖2為郵件長(zhǎng)度對(duì)異常郵件所占比例的影響。
圖2 郵件長(zhǎng)度對(duì)異常郵件所占比例的影響Fig.2 Effect of mail length on the proportion of abnormal mail
從圖2的實(shí)驗(yàn)結(jié)果可以看出,郵件內(nèi)容長(zhǎng)度類型不大于1時(shí),異常郵件占比高,不小于2時(shí)占比逐漸下降。而郵件內(nèi)容長(zhǎng)度類型在2到10之間時(shí),異常郵件占比隨內(nèi)容長(zhǎng)度呈現(xiàn)凸增長(zhǎng),在7的位置達(dá)到極大值,而后趨減。
在經(jīng)過(guò)了上述的郵件集合處理以及特征提取之后,讀取得到的文件并進(jìn)行分割。利用sklearn.model_selection 中的train_test_split隨機(jī)將 10 000 封郵件集按照比例分為測(cè)試集和訓(xùn)練集,并輸出到對(duì)應(yīng)的文件夾下。再將訓(xùn)練集合中已經(jīng)分詞好的內(nèi)容部分進(jìn)行類型轉(zhuǎn)換,從文本數(shù)據(jù)轉(zhuǎn)換為數(shù)值型數(shù)據(jù)以進(jìn)行特征提取,也就是tf-idf權(quán)重計(jì)算部分,即詞頻以及逆文本頻率指數(shù)的計(jì)算,再將數(shù)據(jù)進(jìn)行模型轉(zhuǎn)換得到數(shù)據(jù)模型。
由于在sklearn庫(kù)中已有對(duì)各個(gè)算法的詳細(xì)實(shí)現(xiàn),本文只需按參數(shù)要求,向各個(gè)算法實(shí)現(xiàn)的函數(shù)填充數(shù)據(jù)參數(shù)即可獲得對(duì)應(yīng)的算法模型。另因本文主要研究隨機(jī)森林算法,而隨機(jī)森林算法又基于決策樹,所以此處僅列出決策樹算法和隨機(jī)森林算法在模型填充時(shí)候的參數(shù)選擇。本文經(jīng)過(guò)多次調(diào)參,力求得到最精確的結(jié)果。下面提供關(guān)于決策樹分類器以及隨機(jī)森林分類器主要參數(shù)。
decision_tree算法:
在構(gòu)建decision_tree模型時(shí),采用sklearn.tree下的DecisionTreeClassisfier的決策樹分類器模型,設(shè)置參數(shù)如下。
1)criterion為切分質(zhì)量的評(píng)價(jià)準(zhǔn)則。默認(rèn)為'mse'(mean squared error)。
2)splitter為在每個(gè)節(jié)點(diǎn)切分的策略。
3)max_depth為指定樹的最大深度。如果為None,則表示樹的深度不限,直到每個(gè)葉子都是純凈的,即葉節(jié)點(diǎn)中所有樣本都屬于同一個(gè)類別,或者葉子節(jié)點(diǎn)中包含小于min_samples_split個(gè)樣本。
4)random_state。該參數(shù)如果為整數(shù),則它指定了隨機(jī)數(shù)生成器的種子;如果為RandomState實(shí)例,則指定了隨機(jī)數(shù)生成器;如果為None,則使用默認(rèn)的隨機(jī)數(shù)生成器。
5)max_leaf_nodes。如果為None,則葉子節(jié)點(diǎn)數(shù)量不限。如果不為None,則max_depth被忽略。
random_forest算法:
random_forest本身是建立在decision_tree的基礎(chǔ)上,在構(gòu)建random_forest模型時(shí),采用sklearn.svm下的隨機(jī)森林分類器模型,設(shè)置參數(shù)如下:
1)n_estimators。該參數(shù)為弱學(xué)習(xí)器的最大迭代次數(shù),或者是最大弱學(xué)習(xí)器的個(gè)數(shù)。一般來(lái)說(shuō)參數(shù)越小,越容易欠擬合;越大,越容易過(guò)擬合。默認(rèn)為10,實(shí)際參數(shù)和learning_rate一起考慮。
2)criterion。對(duì)樹做劃分時(shí),對(duì)特征的評(píng)價(jià)標(biāo)準(zhǔn)。分類模型和回歸模型的損失函數(shù)不同。分類RF對(duì)應(yīng)的有基尼指數(shù)gini,另一個(gè)標(biāo)準(zhǔn)是信息增益,回歸RF默認(rèn)是均方差mse,另一個(gè)可選擇的標(biāo)準(zhǔn)是絕對(duì)值差mae,本文采用信息增益作為劃分標(biāo)準(zhǔn),下文將進(jìn)行討論。
3)max_depth。該參數(shù)為樹的最大深度,默認(rèn)為None,直到使每一個(gè)葉節(jié)點(diǎn)只有一個(gè)類別,或是達(dá)到min_samples_split。
4)random_state。如果給定相同的參數(shù)和訓(xùn)練數(shù)據(jù),random_state的確定值將始終產(chǎn)生相同的結(jié)果。一個(gè)具有不同隨機(jī)狀態(tài)的多個(gè)模型的集合,并且所有最優(yōu)參數(shù)有時(shí)比單個(gè)隨機(jī)狀態(tài)更好。
決策樹是數(shù)據(jù)挖掘領(lǐng)域應(yīng)用最廣泛的方法之一,在很多實(shí)際應(yīng)用中都被采用。它是一種非線性監(jiān)督學(xué)習(xí)模型,能將數(shù)據(jù)分成不同的類別并對(duì)未知數(shù)據(jù)進(jìn)行預(yù)測(cè)。決策模型將結(jié)果分解為if-then-else規(guī)則,并以樹型結(jié)構(gòu)展示。這種樹形模型的高可讀性使得人機(jī)更易于理解發(fā)現(xiàn)的知識(shí)。推斷決策樹的過(guò)程主要由以下幾個(gè)方面決定:
1)分割標(biāo)準(zhǔn),即用于選擇要插入節(jié)點(diǎn)和分支屬性的方法;
2)停止分支的標(biāo)準(zhǔn);
3)在葉節(jié)點(diǎn)上分配類標(biāo)簽或概率分布的方法;
4)用于簡(jiǎn)化樹結(jié)構(gòu)的后修剪過(guò)程。
目前有兩種分割標(biāo)準(zhǔn):傳統(tǒng)的分割標(biāo)準(zhǔn)和基于不精確概率的分割標(biāo)準(zhǔn)。區(qū)分它們的一個(gè)基本點(diǎn)是如何從數(shù)據(jù)中獲得概率。通常,傳統(tǒng)標(biāo)準(zhǔn)使用香農(nóng)準(zhǔn)則作為信息的基本測(cè)度。而基于不精確概率的準(zhǔn)則使用最大熵測(cè)度,這種測(cè)量方法基于最大不確定度原理,在經(jīng)典信息理論中被廣泛使用,稱為最大信息增益(information gain,IG)原理,本文在構(gòu)建決策樹時(shí)也是采用這種方法。
設(shè)屬性X為一般特征,其值屬于 {x1,x2,…,xt},信息增益IG解釋如下:
1)數(shù)據(jù)集D的熵C定義為
2)屬性X生成的平均熵為
3)最后可得信息增益(IG)為
隨機(jī)森林是由多顆決策樹構(gòu)成的。如果必須對(duì)一個(gè)新實(shí)例進(jìn)行分類,那么這個(gè)實(shí)例的特性將呈現(xiàn)給森林中的每顆決策樹,每顆決策樹返回一個(gè)分類值,投票給該類。最后,由隨機(jī)森林給出的分類值是與類變量的最優(yōu)投票相關(guān)聯(lián)的值,超過(guò)了森林中的所有決策樹。每顆決策樹具有以下特征:
1)若N是一個(gè)數(shù)據(jù)集中的實(shí)例數(shù),那么隨機(jī)森林從原始數(shù)據(jù)中選擇一個(gè)隨機(jī)樣本,替換N個(gè)實(shí)例,此樣本將作為構(gòu)建決策樹的訓(xùn)練集。
2)若M是數(shù)據(jù)集中的特征數(shù),則指定一個(gè)m< 3)對(duì)于樹中的每一個(gè)節(jié)點(diǎn), ①?gòu)腗個(gè)原始特征中隨機(jī)選擇m個(gè)特征; ②根據(jù)這m個(gè)特征計(jì)算分割標(biāo)準(zhǔn),具有最佳值的特征用于拆分節(jié)點(diǎn)。 4)在構(gòu)建完每顆決策樹之后沒(méi)有修剪。 實(shí)驗(yàn)平臺(tái)包括: 操作系統(tǒng)為Windows10; IDE 為Pycharm 2019.1.1,Python 3.7.3; 實(shí)驗(yàn)數(shù)據(jù)為10 000封郵件,其中有一定數(shù)量異常郵件和一定數(shù)量非異常郵件,均由IndexFile的索引文件指明(spam代表異常郵件,ham代表非異常郵件)。 本文從3個(gè)指標(biāo)對(duì)算法性能進(jìn)行對(duì)比分析,具體定義如下: FN(false negative),被判定為負(fù)樣本、事實(shí)上是正樣本的數(shù)目。 FP(false positive),被判定為正樣本、事實(shí)上是負(fù)樣本的數(shù)目。 TN(true negative),被判定為負(fù)樣本、事實(shí)上也是負(fù)樣本的數(shù)目。 TP(true positive),被判定為正樣本、事實(shí)上也是正樣本的數(shù)目。 準(zhǔn)確率=所有預(yù)測(cè)正確的樣本/總的樣本,即,(TP+TN)/總樣本數(shù)目;在本文中,準(zhǔn)確率=對(duì)異常郵件測(cè)試集中預(yù)測(cè)的樣本數(shù)目/所有測(cè)試集中的樣本數(shù)目; 召回率=將正類預(yù)測(cè)為正類/所有正真的正類,即,TP/(TP+TN);在本文中召回率=對(duì)異常郵件測(cè)試集中預(yù)測(cè)的樣本數(shù)目/所有測(cè)試集中的異常郵件樣本數(shù)目。 F1值=正確率*召回率*2/(正確率+召回率);F1值是精確率和召回率的調(diào)和平均數(shù)。 本文采用了準(zhǔn)確率、召回率、F1值3個(gè)主要的評(píng)判標(biāo)準(zhǔn),并對(duì)6種算法,包括隨機(jī)森林、K最近鄰(k-NearestNeighbor,KNN)、梯度提升樹(gradient Boosting decison tree,gbdt)、貝葉斯、決策樹、支持向量機(jī)(support vector machine,SVM),在上述3個(gè)標(biāo)準(zhǔn)和模型構(gòu)建時(shí)間上進(jìn)行對(duì)比。測(cè)試郵件集合的大小分別為500,1 000,1 500,2 000,2 500,對(duì)比結(jié)果分別如圖3~6所示。 圖3 準(zhǔn)確率對(duì)比圖Fig.3 Accuracy comparison chart 圖4 召回率對(duì)比圖Fig.4 Recall rate comparison chart 圖5 F1值對(duì)比圖Fig.5 Comparison chart of F1 values 圖6 模型構(gòu)建時(shí)間對(duì)比圖Fig.6 Model construction time contrast diagram 從控制臺(tái)輸出結(jié)果以及對(duì)比圖中不難發(fā)現(xiàn),在同組訓(xùn)練集與測(cè)試集的情況下,隨機(jī)森林算法的準(zhǔn)確率為0.985 89,召回率為0.993 68,F(xiàn)1 值為0.989 77,均優(yōu)于其它算法。但在模型構(gòu)建時(shí)間上隨機(jī)森林算法慢于貝葉斯算法、決策樹算法、KNN。不過(guò),由于計(jì)算機(jī)性能不斷增強(qiáng),并且出現(xiàn)了云計(jì)算以及并行計(jì)算等計(jì)算模式,在模型構(gòu)建時(shí)間上,并不是一個(gè)嚴(yán)重的問(wèn)題。 異常郵件檢測(cè)是一個(gè)概率性問(wèn)題,準(zhǔn)確率不高或者誤判都會(huì)給用戶帶來(lái)困擾。通過(guò)實(shí)驗(yàn)分析表明本文采用的隨機(jī)森林算法比其他幾種算法有明顯優(yōu)勢(shì)。但仍存在以下幾個(gè)方面可以進(jìn)一步研究: 1)一個(gè)足夠大的郵件集合數(shù)據(jù)庫(kù)對(duì)異常郵件的檢測(cè)非常重要,樣本量越大也越能高精準(zhǔn)的預(yù)判未知郵件。因此合理構(gòu)建一個(gè)共享的郵件集合倉(cāng)庫(kù)是有必要的。 2)異常郵件類型件在不斷變化,利用單一的異常郵件檢測(cè)機(jī)制是不合理的,可以考慮在不同的算法之間取長(zhǎng)補(bǔ)短,將各種算法進(jìn)行整合,以達(dá)到更高的準(zhǔn)確率。 3)也同樣由于本文只是針對(duì)于純文本的郵件格式,格式單一,而異常郵件在當(dāng)今社會(huì)不只是文本類型,比如音頻、視頻、壓縮文件等異常郵件。近年來(lái),研究人員對(duì)圖像異常郵件的識(shí)別和過(guò)濾技術(shù)的研究較為關(guān)注,但當(dāng)前研究出的過(guò)濾系統(tǒng)都不能很好地實(shí)現(xiàn)異常郵件圖像的識(shí)別和分類,難以滿足圖像型異常郵件過(guò)濾的準(zhǔn)確性、實(shí)時(shí)性及高效性要求。4 實(shí)驗(yàn)及結(jié)果分析
4.1 實(shí)驗(yàn)環(huán)境及數(shù)據(jù)說(shuō)明
4.2 實(shí)驗(yàn)結(jié)果及分析
5 總結(jié)與展望