李斌, 張燕
(1.商洛學(xué)院 商洛學(xué)院科技處,陜西 商洛 726000;2.商洛學(xué)院 數(shù)學(xué)與計算機(jī)應(yīng)用學(xué)院,陜西 商洛 726000)
傳統(tǒng)基于模式識別的入侵檢測方法需要大量完備的訓(xùn)練數(shù)據(jù)集進(jìn)行模型訓(xùn)練,才能使檢測模型具有較高的檢測準(zhǔn)確率。而在實際的網(wǎng)絡(luò)入侵檢測中,網(wǎng)絡(luò)入侵方法日新月異,收集完備的訓(xùn)練數(shù)據(jù)集幾乎是不可能的,并且收集和標(biāo)記數(shù)據(jù)的過程難度大、費(fèi)用高,導(dǎo)致數(shù)據(jù)集有少量的有標(biāo)簽樣本和大量的無標(biāo)簽樣本,在此情況下,傳統(tǒng)的監(jiān)督學(xué)習(xí)算法無法取得較好的分類性能。由于這種情況在實際應(yīng)用中普遍存在,如網(wǎng)絡(luò)入侵檢測[1]、軟件檢測[2-4]、醫(yī)療診斷[5]和文本檢測[6]等等。
現(xiàn)有算法大多是面向均衡數(shù)據(jù)集,在均衡數(shù)據(jù)集下有較好的泛化性能,如文獻(xiàn)[7]中的成對標(biāo)記法,每次迭代對正負(fù)類樣本各選擇一個進(jìn)行標(biāo)記,這樣就要求數(shù)據(jù)集是均衡的,即兩類樣本的數(shù)量相當(dāng),而在實際應(yīng)用中,兩類樣本的數(shù)量是不相當(dāng)?shù)?,例如在網(wǎng)絡(luò)數(shù)據(jù)流中,存在大量的正常行為數(shù)據(jù)和極少量的入侵行為數(shù)據(jù),而對入侵檢測系統(tǒng)來說真正要關(guān)注的是對入侵行為的查準(zhǔn)率和漏報率。因此本文結(jié)合半監(jiān)督學(xué)習(xí)、bagging算法和online learning等算法思想,提出半監(jiān)督集成學(xué)習(xí),并將該算法應(yīng)用到網(wǎng)絡(luò)入侵檢測中。
集成學(xué)習(xí)算法通過一定方法改變數(shù)據(jù)集的分布,獲得多個訓(xùn)練數(shù)據(jù)集,進(jìn)而獲得多個基分類器,然后對多個集分類器按照一定的策略進(jìn)行集成獲得強(qiáng)分類器,實踐和理論都證明,該方法有較好的泛化性能[8-9]。為了讓集成學(xué)習(xí)算法有更好的適應(yīng)性,應(yīng)對數(shù)據(jù)集不斷更新的問題,不少專家學(xué)者提出了在線集成學(xué)習(xí)及其改進(jìn)算法[10]。在線集成學(xué)習(xí)算法是假設(shè)新到的數(shù)據(jù)都有正確兩點(diǎn)類別標(biāo)簽,而實際應(yīng)用中,對新的數(shù)據(jù)流的類別進(jìn)行標(biāo)記需要花費(fèi)大量的代價,導(dǎo)致訓(xùn)練數(shù)據(jù)中有大量的無標(biāo)記樣本,在線集成學(xué)習(xí)算法在面對較多無標(biāo)記樣本時無法取得很好的分類性能。為此,本文結(jié)合半監(jiān)督算法及在線集成學(xué)習(xí)算法思想,設(shè)計了半監(jiān)督集成學(xué)習(xí)算法,詳細(xì)的算法流程如圖1所示。
半監(jiān)督集成學(xué)習(xí)算法的關(guān)鍵要解決幾個問題:① 如果獲得多個基分類器,例如可以用Boosting方法或者bagging方法;② 每次迭代中選擇哪些樣本進(jìn)行標(biāo)記,一旦標(biāo)記錯誤,在后續(xù)的迭代中,錯誤會被累積,影響最終分類器的性能;③ 每輪標(biāo)記多少樣本,每輪迭代標(biāo)記樣本數(shù)越多,算法的速度越快,但標(biāo)記錯誤的概率就會增加,每輪迭代標(biāo)記的樣本數(shù)越少,準(zhǔn)確性會提高,但是算法的速度會降低,因此如何在標(biāo)記速度與準(zhǔn)確度之間進(jìn)行選擇;④ 算法的終止條件。
圖1 半監(jiān)督集成學(xué)習(xí)模型
針對以上問題,該算法用bootstrap方法進(jìn)行有放回抽樣,構(gòu)建m訓(xùn)練數(shù)據(jù)集并獲得m個基分類器,計算法m個基分類器的權(quán)重。每次迭代中選擇優(yōu)選所有基分類器預(yù)測結(jié)果相同的樣本進(jìn)行標(biāo)記,如果不存在這樣的樣本,則選擇75%以上的基分類器標(biāo)記相同的樣本進(jìn)行標(biāo)記,否則采用2/3的基分類器相同的樣本。本文算法每輪迭代標(biāo)記樣本的數(shù)量不確定。對于所有分類器預(yù)測結(jié)果相同的樣本,全部進(jìn)行標(biāo)記;75%以上基分類器相同時采用成對標(biāo)記;若是2/3以上分類器預(yù)測結(jié)果相同時,選擇一個樣本進(jìn)行標(biāo)記。當(dāng)?shù)螖?shù)達(dá)到最大值或者所有無標(biāo)簽樣本都被標(biāo)記或者沒有滿足條件的樣本,則算法終止。詳細(xì)的算法步驟如下。
改進(jìn)的半監(jiān)督Bagging算法
輸入:有標(biāo)簽樣本集T, 無標(biāo)簽樣本集U。
步驟1:循環(huán)m次,用bootstrap方法構(gòu)建m個訓(xùn)練子集并獲得m個基分類器。
步驟2:若U≠?則用m個基分類器對U進(jìn)行預(yù)測,結(jié)果為prej=predict(Cj,U)。
步驟3:依據(jù)prej選擇樣本LS。
步驟4:對于LS中每個樣本XLik,若XLij≠XLi-1k則,取消該樣本的標(biāo)記,重新放回U中;否則,標(biāo)記樣本,從U中刪除該樣本。
步驟5:對LS中每個樣本,對每個基分類器采用泊松分布m←Possion(1)進(jìn)行重采樣,并對每個基分類器進(jìn)行m次更新。
在集成階段采用加權(quán)投票的方式進(jìn)行集成,權(quán)值如何計算是進(jìn)行加權(quán)集成的關(guān)鍵。為了減少數(shù)據(jù)不均衡對集成分類器的影響,假設(shè)兩類樣本錯分代價綜合相等,用N+表示正類樣本的數(shù)量,N-表示負(fù)類樣本的數(shù)量,則兩類樣本的錯分代價用式(1)來計算。
(1)
則基分類器的泛化誤差可表示為被錯分樣本的權(quán)重之和。
(2)
式中:hi(xj)≠yj為樣本xj被分類器hi分欄錯誤。
則基分類器的權(quán)重可表示為:
(3)
數(shù)據(jù)集的選取對算法的性能有較大的影響,但是為了驗證算法的適應(yīng)性,本文采用隨機(jī)選擇的方法選擇訓(xùn)練數(shù)據(jù)集和初始訓(xùn)練數(shù)據(jù)集。本文試驗部分的試驗數(shù)據(jù)是從NSL-KDD數(shù)據(jù)集20%的訓(xùn)練集中隨機(jī)選擇1 000條數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)集,用全部的測試集中的數(shù)據(jù)進(jìn)行測試,并從1 000條訓(xùn)練數(shù)據(jù)集中隨機(jī)選擇的300條作為初始訓(xùn)練集,用bootstrap方法構(gòu)建初始基分類器,然后用剩余的700條數(shù)據(jù)作為無標(biāo)簽樣本進(jìn)行半監(jiān)督學(xué)習(xí)使用。用NSL-KDD數(shù)據(jù)集的11 850條測試數(shù)據(jù)作為測試數(shù)據(jù)集,試驗數(shù)據(jù)集如表1所示。
表1 試驗數(shù)據(jù)集分布
首先對隨機(jī)選取的300條數(shù)據(jù),設(shè)置以式(1)初始化樣本的抽樣概率,然后采用bootstrap方法進(jìn)行有放回抽樣,迭代多次獲得多個訓(xùn)練子集,進(jìn)行訓(xùn)練并構(gòu)建多個基分類器。然后用剩余的700條數(shù)據(jù)模擬無標(biāo)簽數(shù)據(jù)進(jìn)行半監(jiān)督集成學(xué)習(xí),最終獲得集成分類器并對測試進(jìn)行預(yù)測。詳細(xì)的試驗結(jié)果見表2~表4。決策樹算法C4.5和集成學(xué)習(xí)算法AdaBoost算法的試驗結(jié)果采用全部訓(xùn)練集的1 000條數(shù)據(jù)進(jìn)行訓(xùn)練,然后對測試集進(jìn)行測試,而本文算法采用的是先對初始的300條數(shù)據(jù)進(jìn)行訓(xùn)練,然后采用半監(jiān)督學(xué)習(xí)算法對剩余700條數(shù)據(jù)進(jìn)行半監(jiān)督學(xué)習(xí)的結(jié)果。
表2 各類數(shù)據(jù)的準(zhǔn)確率
表3 各項指標(biāo)對比
表4 隨機(jī)10次試驗的結(jié)果
從表2~表4可以看到,本文所提算法性能要優(yōu)于決策樹C4.5算法。這是因為本文采用試驗數(shù)據(jù)集是不均衡數(shù)據(jù)集,不均衡度比較小,另外訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集的分布有較大的差異,如表1所示。訓(xùn)練數(shù)據(jù)集中正常行為數(shù)據(jù)較多,攻擊型數(shù)據(jù)較少,但是在測試集中測試相反,另外本文算法是采用多棵決策樹的集成學(xué)習(xí),本文的試驗也再次驗證多棵樹的集成學(xué)習(xí)算法要比單個決策樹算法性能要好。
另外,從表2~表4還可以看到,本文算法的各項試驗指標(biāo)的試驗結(jié)果都逼近AdaBoost算法,這是因為AdaBoost算法采用的是全部1 000條記錄進(jìn)行試驗的結(jié)果,而本文算法采用300條數(shù)據(jù)進(jìn)行初始訓(xùn)練,然后采用半監(jiān)督學(xué)習(xí)的方式對剩余700條數(shù)據(jù)進(jìn)行學(xué)習(xí)。即便如此,從表2和表3可以看到,本文所提算法的試驗結(jié)果已經(jīng)接近AdaBoost算法。
由于本文算法在構(gòu)建初始的訓(xùn)練子集以及對標(biāo)記樣本加入到對應(yīng)的分類器等過程都有較大的隨機(jī)性,因此表2~表4中的數(shù)據(jù)都采用10次試驗。表2中本文算法的試驗結(jié)果是10次試驗中最好和最差兩次試驗對應(yīng)結(jié)果的平均值。表3是計算10次試驗結(jié)果的均值和標(biāo)準(zhǔn)差,然后所得的試驗結(jié)果與C4.5和AdaBoost算法進(jìn)行對比。圖2是10次試驗中隨機(jī)2次試驗結(jié)果對應(yīng)的接受者操作特征曲線(ROC)與C4.5和AdaBoost算法兩種算法對應(yīng)ROC曲線的對比圖。
圖3是對應(yīng)表4 10次試驗結(jié)果各項指標(biāo)的變化情況,可以看到各項指標(biāo)的變化相對比較平穩(wěn),表明本文所提算法性能較穩(wěn)定。圖4是多個基分類器中隨機(jī)一個分類在100次迭代過程中各個分類器分類準(zhǔn)確率的變化曲線,雖然算法在迭代過程中有一些波動,但是算法整體沿主性能提高的方向前進(jìn),也就是隨著樣本被標(biāo)記并加入到訓(xùn)練數(shù)據(jù)集中,基分類器的性能在不斷提高。由此可以看到,本文算法達(dá)到了設(shè)計目標(biāo)。
圖2 ROC曲線對比圖
圖3 10次試驗各項指標(biāo)的變化情況
圖4 100次迭代準(zhǔn)確率變化情況
針對網(wǎng)絡(luò)入侵檢測無法識別新的攻擊行為,本文結(jié)合半監(jiān)督學(xué)習(xí)和在線集成學(xué)習(xí)算法思想,設(shè)計半監(jiān)督集成學(xué)習(xí)算法,并把該算法應(yīng)用到網(wǎng)絡(luò)入侵檢測中,有效提高網(wǎng)絡(luò)入侵檢測模型的自適應(yīng)性。由算法迭代過程中準(zhǔn)確率變化曲線可以看到,算法的波動較大,如何讓算法和檢測模型更加穩(wěn)定將是下階段的主要工作。