9

所以我在下一步做什麼的交叉路上,我開始學習並在複雜的數據集上應用一些機器學習算法,現在我已經完成了。我從一開始就計劃將兩個可能的分類器結合起來,試圖建立一個多分類系統。聚類和貝葉斯分類器Matlab

但這裏是我卡住的地方。我選擇了一個聚類算法(模糊C均值)(學習了一些樣本K均值填充)和樸素貝葉斯作爲MCS(多分類系統)的兩個候選。

我可以獨立使用兩者來對數據進行分類,但我正在努力以有意義的方式將兩者結合起來。

例如模糊聚類捕捉除了通常一個幾乎所有的「藍精靈」的攻擊,我不知道爲什麼它不抓住這個怪球,但我所知道的是它不。其中一個集羣將受smurf攻擊控制,通常我會在其他集羣中發現一個smurf。如果我在所有不同的攻擊類型(Smurf,Normal,Neptune等等)上訓練貝葉斯分類器,並將其應用於剩餘的集羣以嘗試找到最後一個剩餘的smurf會有很高的誤報率。

我不知道如何繼續,我不想讓其他攻擊退出訓練集,但我只想訓練貝葉斯分類器以發現「Smurf」攻擊。目前它被訓練去嘗試和發現一切,並且在這個過程中我認爲(不確定)精度是否下降。

所以這是我的問題,當使用樸素貝葉斯分類器,你會如何得到它只尋找smurf和其他一切歸類爲「其他」。

rows = 1000; 
columns = 6; 

indX = randperm(size(fulldata,1)); 
indX = indX(1:rows)'; 

data = fulldata(indX, indY) 

indX1 = randperm(size(fulldata,1)); 
indX1 = indX1(1:rows)'; 


%% apply normalization method to every cell 
%data = zscore(data); 

training_data = data; 
target_class = labels(indX,:) 

class = classify(test_data,training_data, target_class, 'diaglinear') 
confusionmat(target_class,class) 

我在想什麼手動從所有的正常交通和藍精靈的arent向其他襲擊改變target_class。然後,因爲我已經知道FCM正確分類除了一個smurf攻擊,我只需要在剩餘的集羣上使用樸素貝葉斯分類器。

例如:

羣集1 = 500 Smurf攻擊(重複此步驟可能會在從1000個樣本Smurf攻擊「多數」轉移到一個不同的簇,所以我已經檢查或通過簇進行迭代對於最大的尺寸,一旦發現我可以從樸素貝葉斯分類器階段刪除它)

然後我測試每個剩餘的羣集分類器(不知道如何做循環等,但在matlab中),所以此刻我必須在處理過程中手動選取它們。

clusters = 4; 
    CM = colormap(jet(clusters)); 
    options(1) = 12.0; 
    options(2) = 1000; 
    options(3) = 1e-10; 
    options(4) = 0; 
    [~,y] = max(U); 
    [centers, U, objFun] = fcm(data, clusters, options); % cluster 1000 sample data rows 

training_data = newTrainingData(indX1,indY); % this is the numeric data 
test_data = fulldata(indX(y==2),:); % this is cluster 2 from the FCM phase which will be classified. 
test_class = labels(indX(y==2),:); % thanks to amro this helps the confusion matrix give an unbiased error detection rate in the confusion matrix. 
target_class = labels(indX,:) % this is labels for the training_data, it only contains the smurf attacks while everything else is classed as other 

class = classify(test_data,training_data, target_class, 'diaglinear') 
confusionmat(test_class,class) 

然後,我重複每個剩餘集羣的貝葉斯分類器,尋找那個smurf攻擊。

我的問題是如果它將「其他」攻擊誤分類爲smurf或未找到剩餘的smurf,會發生什麼情況。

我覺得有一種更好的方式失去了它。我正在試圖選擇一個很好的smurf攻擊比例爲「其他」,因爲我不想過度適合這是在前面的問題here解釋。

但是這需要我一些時間,因爲我還不知道如何改變/替換現有標籤從海王星,背部,ipsweep,wareclient攻擊到matlab中的「其他」,所以我還不能測試這個理論將到達那裏)。

所以我的問題是:

1)是否有在發現一個難以捉摸的Smurf攻擊一個更好的方法。

2)如何可以grep target_class(標籤),以取代不與藍精靈一切「其他

+0

不要嘗試使用聚類,而是直接學習分類器。或者允許羣集之間有一些重疊。如果你在一個clsuter中有一個單一的Smurf實例,你的學習過程可能只是* overfit *。你需要在訓練集中有更多的這門課的訓練數據。 – 2012-07-19 19:01:53

+1

或者嘗試僅在*類中使用聚類*。然後學習訓練一類分類器來識別特定的聚類。這是有道理的,假設有不同類型的smurf/normal/etc。 – 2012-07-19 19:03:53

回答

1

我會盡力部分回答您的問題。

1)有沒有更好的方法找到一個難以捉摸的smurf攻擊。

我建議你不要試試這個。 500分之1。這幾乎很明顯是過度適合您的數據的情況。您的分類器不會很好地測試數據。

2)如何可以grep target_class(標籤),以取代不與 「其他」

藍精靈對於這種嘗試下面的MATLAB代碼的一切。

clear all; 
close all; 
load fisheriris 
IndexOfVirginica = strcmp (species, 'virginica'); 
IndexOfNotVirginica = IndexOfVirginica ==0; 
otherSpecies = species; 
otherSpecies(IndexOfNotVirginica) = {'other'}; 
otherSpecies