朱子龍 張立臣
(廣東工業大學計算機學院 廣東 廣州 510006)
信息物理融合系統是一個由現代傳感器、計算設備和網絡技術集成為一體的系統[1]。物理世界的行為通過傳感器網絡傳輸到信息世界,由信息世界進行計算分析,發出控制指令,作用于物理世界。整個過程信息計算和物理過程進行了深度融合,其中的計算、控制和通信是以可靠、安全和實時的方式實施,不需要人為干預,形成一個協作和自治的閉環系統[2]。
CPS應用的快速增長,導致許多安全性和機密性問題的出現[3]。因為信息計算依賴于物理過程中傳感器收集的數據,而這些數據需要通過網絡進行傳輸,同時,物理過程中接收的控制指令也需要通過網絡進行傳輸。因此,CPS設備的自治性會導致入侵和攻擊的風險[4]。CPS的安全問題越來越受到業界的關注[5]。
文獻[6]設計了在智能電網中使用的分布式入侵系統,通過大量的流量分析模塊,結合人工免疫系統(Artificial Immune System,AIS)和支持向量機(Support Vector Machine,SVM)檢測網絡流量中的攻擊行為。文獻[7]提出了基于EBP神經網絡的規則學習算法,從實驗數據的ICMP分組中提取特征,輸入到EBP神經網絡中進行訓練,使網絡學習其中的規則對網絡異常行為進行識別。文獻[8]提取了DoS(Denial of Service)攻擊下的網絡流量特征,結合K-近鄰(K-Nearest Neighbor,KNN)等機器學習算法對正常和攻擊行為進行區分。文獻[9]將PCA與核函數空間結合,實現對非線性結構的網絡數據進行異常檢測。文獻[10]運用稀疏自編碼網絡進行降維,結合LightGBM算法進行分類,以二叉樹的形式處理網絡攻擊分類的多分類問題,并在NSL-KDD標準數據集上對算法準確率進行對比實驗。文獻[11]搭建了一個電源系統試驗臺,并輔以網絡監控設備,采集其中的網絡流量信息運用Adaboost集成學習框架,結合JRipper規則學習算法,對電力系統中的異常行為進行檢測,并與常見的機器學習算法進行對比。文獻[12]提出了兩種適用于CPS環境的入侵檢測系統,一種是基于K均值聚類算法,另一種基于自組織映射網絡(Self-Organizing Map,SOM)。實驗顯示兩類入侵檢測系統提高了檢測速率和精度,可以便捷地部署在CPS環境中。基于上述工作應用于CPS入侵檢測時的缺陷,需要繼續優化算法應對高維數據的能力,進一步提升算法的速度,使其能滿足CPS入侵檢測對實時性的要求。
本文貢獻在于:
(1) 提出一種結合相關性特征選擇的堆疊極限樹集成算法(CFS-SET)。首先通過基于相關性的特征選擇算法,結合最佳優先(BestFirst)的搜索策略,對信息物理融合系統的數據特征進行篩選,選擇出關聯性較高的特征。能夠有效地為后續的分類算法降低輸入量,減輕計算壓力,以達到信息物理融合系統實時分析的需求。后續選擇的極限樹算法,會隨機選擇特征,因此剔除掉關聯性較低的特征將會進一步提升算法的整體表現。
(2) 將極限樹算法引入信息物理融合系統入侵檢測,將其作為Stacking集成算法的基學習器,雖然其算法復雜度與一般的樹算法相同,同為NlogN,但是考慮到節點拆分過程的簡單性,其常數因子比其他基于局部集成優化切點的方法更小。進一步提高分類速度,優化信息物理融合系統的運算時間。
(3) 使用Stacking集成學習框架,同時訓練若干個極限樹,將其輸出送入邏輯回歸分類器。采用這種堆疊式模型來提高預測的準確度,改善分類性能,同時最小化泛化錯誤率,增強算法的魯棒性。本文將使用密西西比州立大學的電力系統標準數據集Power System Dataset進行實驗,驗證本文算法的有效性。
CPS所產生的數據往往呈現出數據量龐大、特征眾多的特點。一般的機器學習算法面對如此龐大的高維數據,計算所需要的時間將會直線上升,不能滿足CPS對算法實時性的要求。并不是所有的特征都有利于算法的學習,其中存在著大量的冗余和不相關特征。面對高維數據,通常有降維算法和特征選擇兩種方式。降維算法通過挖掘特征深層的信息來達到降維的目的,缺點在于每次進行預測的時候都要對輸入的特征進行降維,需要額外的時間開銷。特征選擇則可以選出有價值的特征,在對模型進行訓練和預測的時候直接選擇這些特征作為輸入,減少時間開銷。為了滿足CPS實時性的需求,本文用特征選擇算法對高維數據進行預處理。
特征選擇算法可以分為三個大類:過濾式(filter)、包裹式(wrapper)和嵌入式(embedding)。過濾式方法直接對所有特征進行篩選,保留樣本對應的特征數據,送給后續模型進行訓練,對特征進行選擇的過程與后續模型的性能沒有關系,僅僅關注數據集的特征本身。包裹式方法則是根據后續模型的分類性能作為特征,反過來矯正需要的特征,所以結果與模型直接相關。從最終模型的分類性能來看,因為針對所使用的特定學習算法對特征選擇進行了優化,所以包裹式往往比過濾式的效果更好。包裹式的缺點是在進行特征選擇的時候需要反復的訓練模型,計算開銷往往大于過濾式,尤其是當模型本身的計算非常復雜的時候。同時因為包裹式與后續模型結合太過緊密,一旦更換后續的模型,必須重新運行特征選擇算法。嵌入式與上述兩種特征選擇算法不同,嵌入式方法沒有明顯的特征選擇過程,它的過程是融合在模型訓練的過程中,也就是說模型在訓練過程中自動地進行了特征選擇。
本文將特征選擇引入集成算法當中,將其作為整個算法改進的一部分,具體是選擇過濾式特征選擇算法。它可以減少學習所需的數據量,提高預測準確性,使學習的知識更緊湊,更容易理解以及減少執行時間,不需要針對不同的學習算法重新執行。CPS是一個對實時性要求很高的系統,所以過濾式相比于其他兩種特征選擇算法,更符合CPS入侵檢測算法的需求。
CFS是一種基于特征之間相關性的過濾式特征選擇算法,可以快速識別并篩選不相關、冗余的特征,并在不嚴格依賴其他特征的情況下識別相關特征。CFS是一種全自動算法,不需要用戶指定任何閾值或要選擇的特征數量,同時,CFS是一種過濾式特征選擇算法,因此不會重復調用學習算法而增加計算成本[13]。
CFS使用基于相關性的啟發式評估函數對特征子集進行排名。評估函數偏向于包含特征與類別高度相關,特征與特征之間彼此不相關的特征的子集。與類別沒有關系的特征應該被忽略,同時冗余特征應該被篩選出來,因為它們與一個或多個特征高度相關。其評估的形式化定義如下:
(1)

最佳優先搜索策略可以選擇從沒有特征或所有特征開始搜索,如果選擇從沒有特征開始搜索,會通過添加單個特征的方式在搜索空間中進行;如果選擇從所有特征開始搜索,則會通過刪除單個特征的方式在搜索空間中進行。如果有五個連續完全展開的子集對當前的最佳子集沒有提升,則搜索將終止。由于在對特征子集進行相關性評價的時候,需要使用離散化的變量來進行計算,如果特征屬性是數值型,則應當先對數值型數據進行離散化。圖1展示了CFS進行特征選擇時對訓練集和測試集的具體流程。

圖1 CFS特征選擇算法流程
極限樹算法使用經典的自頂向下的過程構建未修剪的決策樹。與其他基于樹的算法的區別主要有兩點,一是極限樹通過完全隨機的方式選擇切點來分割節點,二是極限樹在生長的過程中使用整個學習樣本。
對于評分機制,本文使用文獻[14]中的評分機制對需要進行隨機選擇的屬性進行評價,選擇其中評分最高的劃分屬性。在分類問題中,用信息增益來定義評分函數,對于當前劃分節點,式(2)為評分度量。
(2)

算法1Single Extra Tree生成算法。
輸入:訓練集D={(x1,y1),(x2,y1),…,(xm,ym)}, 屬性a。
輸出:極限樹,劃分屬性。
Step1如果|D| Step2將node標記為葉節點并返回。 Step3從所有候選屬性中隨機選擇K個屬性{a1,a2,…,aK}。 Step4形成K個劃分{s1,s2,…,sK},式(3)對si計算進行了定義。 si=Pick_a_random_split(D,ai) ?i=1,2,…,K (3) Step5由Score(d*,D)選擇出最好的劃分值d,其分數計算如式(4)所示。 (4) Step6依據d*將樣本集D分割成兩個樣本子集Dl和Dr。 Step7使用樣本子集Dl構造左子樹tl=Build_an_extra_tree(Dl),使用樣本子集Dr構造右子樹tr=Build_an_extra_tree(Dr)。 Step8根據d*建立節點,tl和tr分別是它的左子樹和右子樹,形成一棵極限樹并返回。 Step11劃分屬性[a 單棵極限樹隨機性太強,一般會使用隨機森林的思想,生成眾多極限樹組成極限森林來提高整個算法的穩定性。但生成大量的極限樹需要額外的時間和內存開銷,不能滿足CPS入侵檢測對實時性的要求。本文提出將極限樹算法和Stacking集成算法進行結合,使用極限樹作為Stacking集成算法的基學習器,由于極限樹的隨機性,符合Stacking集成算法對基學習器之間存在差異的需求。堆疊極限樹可以提升算法的穩定性,提高泛化精度。 為了能夠進一步滿足CPS入侵檢測對實時性的要求,本文結合相關性特征選擇算法和堆疊極限樹算法,提出CFS-SET算法。在CPS的入侵檢測中,數據常常呈現特征眾多、維度高的特點,造成算法運算時間長和性能不佳的效果。采用相關性特征選擇算法(CFS),結合最佳優先(BestFirst)的啟發式搜索策略,可以自動地從入侵數據的眾多特征中選擇出有用的特征,減少后續分類算法的訓練和預測時間。同時,因為極限樹是隨機地選取特征來生長一棵樹,所以特征選擇有助于提高單棵極限樹的性能。使用選擇出的新特征組成新的訓練集和測試集,將其送入后續的堆疊極限樹(SET)算法中。堆疊極限樹算法是將若干個極限樹模型作為基分類器,向這些分類器中送入相同的訓練數據進行訓練。所有分類器輸出的預測結果合并成一個新的特征,輸入下一層的邏輯回歸分類器進行訓練。算法中使用的極限樹具有隨機性,改變隨機種子后即可生長出兩棵完全不同的極限樹,所以其堆疊的數量很重要,過多的堆疊數量會導致計算時間過長,過少的堆疊數量無法獲得良好的檢測性能。因此對極限樹的堆疊數量進行了實驗,綜合計算時間和檢測性能,實驗選擇使用5棵極限樹進行堆疊。算法本質是一個二層的結構,算法框架如圖2所示,可以看出算法主要包含特征選擇和Stacking兩部分。其中:TrainingData和TestingData為訓練集和測試集數據;CFS為相關性特征選擇算法,具體流程如圖1;CFSTrainingData和CFSTestingData為經過特征選擇算法篩選后訓練集和測試集數據;ExtraTree-1、ExtraTree-2等是5棵不相同的極限樹作為Stacking中的基學習器;Pred-1、Pred-2等是各個基學習器產生的預測結果;MergeData是合并了基學習器預測結果的數據集;logisticsregression是第二層的邏輯回歸模型。 圖2 CFS-SET算法流程 具體步驟為: (1) 將具有m個特征的訓練集TrainingData進行相關性特征選擇(CFS),選擇出n個特征的訓練集CFSTrainingData。 (2) 從具有m個特征的測試集TestingData中挑選出相同的n個特征,組成測試集CFSTestingData。 (3) 將5份相同的訓練集CFSTrainingData分別送入5個不同的ExtraTree中,使用10折交叉驗證來訓練,訓練出5個不同的ExtraTree模型,并輸出5份對應的預測結果。 (4) 將5份不同的預測結果合并成一個全新的數據集,作為訓練集送入下一層邏輯回歸進行訓練。 (5) 保存整個模型,訓練結束。 值得注意的是,雖然基學習器使用的都是極限樹,但因為設置了不同的隨機種子,每棵樹在分裂的時候會進行隨機的分裂,生長成不同的樹,所以是互不相同的模型,各自得到的輸出也不同。使用Stacking的目的主要是獲得盡可能高的泛化精度(與學習精度相反),其中心思想是,比簡單地列出與訓練集一致的父函數的所有預測結果做得更好。它通常可以結合多個基分類器的優點,提高泛化性能,并且表現穩定。 為了驗證本文提出的CFS-SET算法的有效性,本文使用密西西比州立大學關鍵基礎設施保護中心2014年建立的電力系統數據集(Power System Datasets)[15]對本文算法性能與幾種代表性的機器學習和集成學習算法進行比較。測試硬件平臺為:Windows 10專業版64位操作系統、Intel(R)CoreTMi7-4700HQ CPU @ 2.40 GHz處理器、8 GB內存。使用Python語言對數據進行預處理,使用Weka[16]作為機器學習算法框架進行比較。 Power System Datasets數據來源于一個二進線三母線智能電力系統對37種事件的仿真。現代電力傳輸系統依靠傳感器進行遠程監控。其數據包括電壓和電流等測量值以及系統設備的狀態,如繼電器、斷路器和變壓器等。智能電網作為CPS在現實中應用最廣泛的場景,是驗證本文算法的理想環境。 本文著重于識別威脅CPS正常運作的入侵事件,所以選擇對事件進行二分類的分類方案。整個數據集被分為37個事件場景,其中:28個事件為攻擊行為;9個事件為正常操作。數據來自15個數據庫,隨機抽取1%的數據以減小大小并評估小樣本大小的有效性,組成15個數據文件。表1列舉了攻擊行為和正常操作的序號分類。 表1 二分類事件具體分類表 Power System Datasets數據集共有78 377個樣本,每條樣本數據的存儲形式為X=(x1,x2,…,xn,y),每條樣本數據具有128個特征屬性(其中116個測量值由4個同步儀產生,余下的12個測量值來自控制面板日志、中繼日志和Snort警報)和1個類標簽。由于數據量充足,本文剔除了屬性存在缺失值的數據。同時由于特征屬性離散和連續數值混合,本文對數據進行Z-Score標準化處理,根據式(5)將數據轉化為標準正態分布。 (5) 式中:x是個體觀測值;μ是總體數據的均值;σ是總體數據的標準差。 本文將采用以下評估指標來衡量用于CPS入侵檢測任務的算法性能。 準確率指的是算法正確分類的樣本數量與總體樣本數量的比值。雖然準確率可以判斷總體的準確率,但是在樣本不平衡的情況下,可能會出現高準確率但其結果含有很大水分,不能準確反映分類性能。比如當正常操作的樣本數量很少的情況下,極端地將所有的類別預測為攻擊即可獲得很高的準確率,顯然,這不能準確地反映算法的性能。準確率利用式(6)進行計算。 (6) 式中:TP(真正例)表示攻擊行為被正確分類的數量;TN(真反例)表示正常操作行為被正確分類的數量;FN(假反例)表示攻擊行為被錯誤分類的數量;FP(假正例)表示正常操作行為被錯誤分類的數量。 精確率衡量的是,算法識別出的正例中算法預測正確的百分比,即算法分類為攻擊行為的樣本中,真正是攻擊行為的比率。精確率越高代表算法的誤報率越低。精確率利用式(7)進行計算。 (7) 靈敏度衡量的是正確識別出正例的比率,即算法正確識別出攻擊行為的百分比。靈敏度越高代表算法的漏報率越低。利用式(8)可以計算出靈敏度。 (8) F1分數指的是精確度和召回率的調和平均值,其值在0到1之間,當F1分數較高的時候說明算法分類性能較好。式(9)給出了F1值計算方法。 (9) 圖3展示了結合相關性特征選擇的堆疊極限樹集成算法(CFS-SET)和另外6種常見的經典機器學習算法在15個數據集上的分類準確率。分類準確率是通過在每個數據集上進行10折交叉驗證,取得的分類準確率計算出的均值。可以看出,7種算法無論應用于15個數據集的哪個數據集,結果都是一致的,雖然有細微的變化,但分類表現都是相對穩定的。其中表現最好的兩種算法分別是CFS-SET和Random Forests,分類準確率都在95%以上。作為基學習器的Extra Tree和Nearest Neighbor算法分類準確率能達到90%。 圖3 15個數據集上分類準確率 圖4顯示了15個數據集上不同算法的平均精確率,其中每個數據集使用10折交叉驗證的方法。精確率在本例中的含義是識別出的真正是攻擊行為的數量與總的攻擊行為數量之間的比值。精確率越高,代表算法越不會將正常的操作行為誤報為攻擊行為。在7種算法中,CFS-SET和Random Forests的在15個數據集上的平均精確率表現最佳。 圖4 平均精確度 圖5顯示了15個數據集上不同算法的平均漏報率,其值是根據1-Sensitivity來確定的,其中每個數據集使用10折交叉驗證的方法。可以看出SVM在漏報率上表現非常出色,15個數據集沒有誤報的情況發生,但結合精確率可以發現,SVM在精確率上表現很差,也就是說這種低漏報率的表現是通過高誤報率換來的。在實際環境中,這種算法對決策者的價值很低,因為其分類表現是不可靠的。AdaBoost、CFS-SET和Random Forests的漏報率在0到0.1之間,表現良好。 圖5 平均漏報率 圖6顯示了所有數據集的平均F1值,它本質上綜合了分類性能的精確率和靈敏度。可以更好地反映出算法的分類性能。可以看到CFS-SET和Random Forests擁有最高的F1值,都達到了0.979。說明CFS-SET算法在分類性能上與Random Forests基本相當。 圖6 平均F1值 在CPS中進行入侵檢測不僅需要算法的分類性能良好,還需要滿足CPS對算法實時性的要求,即算法的模型建立時間和預測時間要盡可能的短,否則即使算法的分類性能出眾,也無法應用于CPS的入侵檢測中。表2展示了每個算法進行10折交叉驗證時,平均每折的耗時和10折總耗時情況。可以看出上文分類性能相當的CFS-SET和Random Forests算法,在計算時間上,CFS-SET算法只用了Random Forests算法的1/5的時間。可見在總體性能表現上,本文提出的CFS-SET算法更好地兼顧了分類準確率和計算時間兩者間的平衡。 表2 模型運行時間匯總表 單位:s 利用基于特征之間相關性的特征選擇算法,快速篩選出關聯性高的特征,拋棄冗余和不相關的特征,這樣可以加速后續的分類算法。使用Stacking的集成算法框架,提升算法的泛化能力,減少單棵極限樹隨機性太強帶來的偏差。實驗結果表明,本文提出的CFS-SET方法能夠從眾多的入侵數據特征中過濾出真正有用的特征,進而提升分類效率。對比其他常見的機器學習算法對CPS環境中的攻擊行為檢測,更好地兼顧了誤報率和漏報率,F1值達到了平均0.979。同樣使用集成算法思想的Random Forests算法也達到了與CFS-SET相同的F1值。但在實時性方面,CFS-SET算法只使用了Random Forests算法1/5的計算時間。本文將隨機性很強的極限樹算法進行堆疊,改善其因為隨機性帶來的分類性能不佳的問題,吸收其計算速度快的優點,使CFS-SET算法同時兼顧分類性能和分類時間,使得將其應用于CPS入侵檢測成為可能。本文進一步的工作將考慮把CFS-SET算法推廣至多分類的CPS入侵檢測中,能夠對不同的入侵檢測行為進行分類,同時需要考慮多分類情況下,類別不均衡對分類算法的影響。將上采樣和下采樣技術融合入CFS-SET算法中,保持甚至提升算法在多分類情況下的分類性能和計算時間,能夠繼續應用于CPS入侵檢測的多分類領域。


2.2 結合相關性特征選擇的堆疊極限樹集成算法描述

3 仿真測試
3.1 數據預處理

3.2 分析方法
3.3 實驗結果分析





4 結 語