weka是乙個功能非常強大的資料探勘工具,但是網路上的相關教程卻極其稀少,尤其是沒有一套系統的教程指導使用者處理較大資料集(>50mb)。這篇文章是我這學期一門課程作業的總結,主要內容是利用weka分析kdd99的資料集,訓練分類器以解決問題。文章的所有過程都是在explorer介面中進行的。
關於kdd99資料集的介紹,可以移步這兒,在此不多做介紹。對於初學者來說,處理大資料集的難點主要在於:
要解決這兩個問題,需要對資料集進行預處理。針對第乙個問題,我們需要按照一定的規則對資料集進行抽樣,針對第二個問題,則需要改變資料的形式。事實上,在資料探勘的過程中,資料的預處理一直都是非常重要的乙個環節,只有把資料轉化為分類器認可的形式才可以對其進行訓練,而這個過程主要包括五部分,它們是資料標識、資料清洗、標準化抽樣、資料歸一化、資料離散化。
1 資料預處理
資料標識
解壓資料報後,得到的是純文字檔案,其中的資料均用逗號隔開,且各個變數沒有標識,weka無法識別,因此需要先對檔案新增csv字尾名,將文字用excel開啟,為其新增標識。儲存檔案後,檔案便可以利用weka開啟,但在此之前,我們必須對資料進行一些處理。
為了便於分類演算法的進行,我們最終的**屬性最好不要多於10個,因此,有必要將資料集(包括測試集)中所有的攻擊類別標識統一化,我選擇了用0,1,2,3,4分別代表normal,dos,probe,r2l,u2r五個大類,將所有分類標識均用這五個數字代替。該過程可以利用excel完成。
資料清洗
在完成標識工作後,需要進行資料清洗的步驟,kdd99的資料集中,存在極個別的不符合規範的資料,需要檢查然後將其剔除。
經過清洗後的資料可以利用weka軟體開啟,為了便於軟體進行處理,推薦將資料集另存為arff格式(處理速度更快)。此外,需要注意的是,訓練集和測試集的arff屬性段必須完全相同,例如,第三個屬性段「目標主機服務型別」中,訓練集和測試集的資料段並不同,而且自動生成的arff屬性段中的排列順序也不同,因此,需要對資料集進行手動修改,將屬性段改為訓練集屬性段和測試集屬性段的並集。(這乙個階段推薦使用notepad++直接對檔案進行更改)
資料抽樣
由於資料集過大,個人電腦的處理速度仍舊過慢,因此,需要對資料集進行標準化抽樣,即按照特定屬性對資料進行抽樣縮減,選擇過濾演算法中選擇unsupervised-instance-resample演算法,將抽樣百分比設為20%,即可得到6m左右的資料集。我所抽樣的資料集資訊如下表所示。注意,該抽樣演算法是按照**屬性的數量按比例抽取的,因此,抽樣後的資料集中,五種攻擊型別的數量比仍和原資料集類似。
型別樣本數量
normal
12056
dos46024
probe
839r2l
3277
u2r9
總數62205
資料歸一化
由於訓練集和測試集中大部分屬性的取值範圍不同,無法取得相同的離散區間,因此,在進行離散化之前,需要將部分資料進行歸一化。需要進行歸一化的資料是取值連續且無固定上下界的資料,如duration,src_byte等,利用過濾演算法中的unsupervised-instance-normalize演算法,將區間定為20,可將資料歸一化。
資料離散化
所有參與分類演算法的屬性均需要進行離散化,對於之前已經進行過歸一化的屬性,直接利用unsupervised-attribute-discretize演算法便可將它們離散化,而其他取值是類似於或這種型別,利用unsupervised-attribute-numerictonominal演算法可將屬性離散化。這兒仍要注意,訓練集和測試集的屬性段資訊必須完全相同!
最後得到的資料集效果如圖所示:
2 特徵選擇
對於經過離散化的資料,我們需要進行簡要的分析,對其中的屬性進行篩選。如果屬性在經過離散化之後沒有明顯的區分度,那麼可以判斷它對於分類演算法的幫助較小,在這一步過程中,num_outbound_cmd,is_host_login,urgent,su_attempted,num_shell,num_failed_login,num_filecreation這些屬性呈現出過度集中於某一區間的趨勢,因此將他們排除。最後一共留下35個屬性進行分類。訓練集與測試集都要進行上述步驟。
3 模型評估
做完預處理之後就可以進入classify介面進行分類器訓練的工作了,訓練完之後可以用測試集對分類器進行測試。下表顯示了nbtree演算法的檢驗資料,包括了tp值,fp值,recall值和f-means值,同時還列出了演算法總體正確分模擬和執行所需時間。
對於入侵檢測來說,查全率(recall)和演算法應用速度是最為關鍵的兩項指標,因為將正常訪問誤判為攻擊比將攻擊誤判為正常訪問的代價要小得多,另外,系統需要對來訪資訊作出及時的判斷,所以速度過慢的演算法,如下表中的nbtree,即使正確率很高也無法勝任入侵檢測模型。
dosprobe
r2lu2r
nbtree
tp0.969
0.683
0.084
0.444
fp0.009
0.00300
recall
0.969
0.683
0.084
0.444
f-measure
0.983
0.716
0.154
0.571
正確分模擬率
92.4
執行時間
164s
4 優化方案
在建立好分類器之後,資料探勘的工作並沒有完全結束,對於初級分類器,需要不斷進行優化以提高它的分類準確度。常用的優化方案主要有三種,對屬性的離散化進行優化、篩選特徵屬性、優化演算法。
資料的離散化是資料預處理中較為重要的一步,如果離散化的資料過於集中,直接的後果就是不同類別的屬性值沒有得到很好的區分,但是離散化的優化需要對資料本身有著充分的了解,最好與專業人員合作進行。
資料探勘的過程中,往往會得到大量的屬性值,但這些屬性之中有些並沒有實際意義,不同屬性值之間的權重也不相同,所以在對資料集有著充分了解的基礎上,可以適當剔除多餘屬性,篩選出重要的屬性進行分類,效果會更好。
大多數分類演算法本身已經經過了無數的檢驗和優化,但是對於特定問題,我們可以在這些演算法的基礎上進行改編,制定特定的演算法,在該實驗中,我們就可以建立乙個組合分類器,讓它在不同的情況下運用不同的演算法進行分類,得到更高的準確性。
js高階函式(基於vue)
1.過濾器const nums 10 26,46 82,160,62 let nums2 nums.filter function n console.log nums2 2.map裡面的所有數字 2,再放到num3裡面 let nums3 nums.map function n console.l...
基於quartus的高階時序分析
派生時鐘就是和獨立時鐘存在頻率或者相位關係的時鐘,非同步儲存器就是具有儲存讀寫非同步功能的儲存器。在時序分析中,這兩個部分的靜態時序分析是需要設定個別約束的。派生時鐘會產生時鐘偏斜或者不同頻率時序問題,非同步儲存器則類似latch,存在建立時間和保持時間的要求。分別對獨立時鐘和衍生時鐘做時序約束,保...
javascript 高階 基於原型鏈的繼承
function parent parent.prototype.parentvalue function function children 將children的原型指向parent的乙個例項,完成繼承 children.prototype new parent children.prototyp...