集群和贝叶斯分类器Matlab的(Clustering and Bayes classifiers

2019-07-30 12:35发布

所以,我在下一步该怎么做一个十字路口,我开始学习和应用上的复杂数据集的一些机器学习算法,现在我已经做到了这一点。 我从一开始的计划是两个可能的分类,企图使多分类系统结合起来。

但这里是我在哪里卡住了。 我选择的聚类算法(模糊C均值)和朴素贝叶斯为两位候选人的MCS(多分类系统)(学习一些样品的K-means东西后)。

我可以单独使用两个来对数据进行分类,但我奋力两个以有意义的方式结合起来。

例如模糊聚类捕捉除了通常是一个几乎所有的“蓝精灵”的攻击,我不知道为什么它不抓住这个奇怪的球 ,但我所知道的是它不。 其中的一个群集将由Smurf攻击为主,并usualy我会发现,在其他集群只是一个蓝精灵。 这里是我遇到的问题的情况下,如果我训练上所有不同的攻击类型(蓝精灵,正常,海王星...等)的贝叶斯分类器并应用到集群的剩余部分,试图找到最后剩下的蓝精灵将具有较高的误报率。

我不知道该如何处理,我不想采取其他攻击了训练集,但我只想训练贝叶斯分类器被发现“蓝精灵”的攻击。 目前,它是训练有素的尝试和发现的一切,并在这个过程中,我认为(不知道),其精度下降。

所以这是我的问题,使用朴素贝叶斯分类器时,你会怎么得到它只能寻找蓝精灵和分类,一切为“其他”。

 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)

我在想什么是手动更改target_class所有正常流量的arent蓝精灵到其他和攻击。 然后,因为我已经知道,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攻击。

我的问题是,如果它misclassifies“其他”攻击的蓝精灵还是没有找到一个蓝精灵的剩余会发生什么。

我觉得有点失去了做一个更好的方式。 我在试图挑Smurf攻击一个很好的比例为“其他”,因为我不想过拟合这在以前的问题被解释的过程在这里 。

但是这将需要我,我不还不知道怎么改/海王星,背部,通过IPSweep,wareclient攻击“其他”在MATLAB,所以我还不能验证这一理论进行替换现有标签(会到达那里)一段时间。

所以我的问题是:

1)是否有在发现一个难以捉摸的Smurf攻击一个更好的方法。

2)我如何可以grep target_class(标签),以取代不与蓝精灵一切“ 其它

Answer 1:

我会尽力部分回答您的问题。

1)是否有在发现一个难以捉摸的Smurf攻击一个更好的方法。

我建议你不要尝试。 1 500。这几乎是明确的过度拟合您的数据的情况。 您的分类将不会归纳很好的测试数据。

2)我如何可以grep target_class(标签),以取代不与蓝精灵一切“其它”

对于这种尝试下面的MATLAB代码。

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


文章来源: Clustering and Bayes classifiers Matlab