所以我在下一步做什麼的交叉路上,我開始學習並在複雜的數據集上應用一些機器學習算法,現在我已經完成了。我從一開始就計劃將兩個可能的分類器結合起來,試圖建立一個多分類系統。聚類和貝葉斯分類器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(標籤),以取代不與藍精靈一切「其他」
不要嘗試使用聚類,而是直接學習分類器。或者允許羣集之間有一些重疊。如果你在一個clsuter中有一個單一的Smurf實例,你的學習過程可能只是* overfit *。你需要在訓練集中有更多的這門課的訓練數據。 – 2012-07-19 19:01:53
或者嘗試僅在*類中使用聚類*。然後學習訓練一類分類器來識別特定的聚類。這是有道理的,假設有不同類型的smurf/normal/etc。 – 2012-07-19 19:03:53