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