聚类和贝叶斯分类器 Matlab

2024-03-02

因此,我正处于下一步该做什么的十字路口,我开始学习一些机器学习算法并将其应用于复杂的数据集,现在我已经做到了。我从一开始的计划就是结合两种可能的分类器,试图建立一个多分类系统。

但这就是我被困住的地方。我选择聚类算法(模糊 C 均值)(在学习了一些示例 K 均值之后)和朴素贝叶斯作为 MCS(多分类器系统)的两个候选算法。

我可以独立使用两者来对数据进行分类,但我正在努力以有意义的方式将两者结合起来。

例如,模糊聚类捕获了几乎所有“Smurf”攻击,除了通常的攻击之外。one我不知道为什么它没有抓住这个odd ball但我只知道事实并非如此。其中一个集群将受到蓝精灵攻击的主导,通常我只会在其他集群中找到一个蓝精灵。这就是我遇到问题场景的地方,如果我在所有不同的攻击类型(蓝精灵、正常、海王星...等)上训练贝叶斯分类器,并将其应用于其余的集群,试图找到最后一个剩下的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)

我的想法是手动更改target_class来自所有正常流量和非 Smurf 的攻击other。然后,由于我已经知道 FCM 可以正确分类除一次 smurf 攻击之外的所有攻击,因此我只需对其余集群使用朴素贝叶斯分类器即可。

例如:

集群 1 = 500 次蓝精灵攻击(重复此步骤可能会将“大多数”smurf 攻击从 1000 个样本转移到不同的集群中,因此我必须检查或迭代集群以获得最大尺寸,一旦找到,我可以将其从朴素贝叶斯分类器阶段中删除)

然后我在每个剩余的集群上测试分类器(不确定如何在 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)

然后,我对剩余的每个集群重复贝叶斯分类器,寻找一次蓝精灵攻击。

我的问题是,如果它将“其他”攻击错误分类为蓝精灵或找不到剩余的蓝精灵,会发生什么。

我感觉有点迷失了更好的方法。我正在尝试选择蓝精灵攻击与“其他”的良好比率,因为我不想过度拟合,这在上一个问题中已解释过here https://stackoverflow.com/questions/11554938/naive-classifier-matlab.

但这需要我一些时间,因为我还不知道如何将现有标签从 neptune、back、ipsweep、wareclient 攻击更改/替换为 matlab 中的“其他”,所以我还无法测试这个理论(将到达那里) 。

所以我的问题是:

1) 是否有更好的方法来发现难以捉摸的蓝精灵攻击。

2)我怎样才能grep target_class(标签)来替换所有不是smurf的东西“other"


我将尝试部分回答你的问题。

1) 是否有更好的方法来发现难以捉摸的蓝精灵攻击。

我建议你不要尝试这个。五百分之一。这几乎显然是数据过度拟合的情况。您的分类器不能很好地推广到测试数据。

2)我如何grep target_class(标签)以用“其他”替换所有不是smurf的内容

为此请尝试以下 matlab 代码。

clear all;
close all;
load fisheriris
IndexOfVirginica = strcmp (species, 'virginica');
IndexOfNotVirginica = IndexOfVirginica ==0;
otherSpecies = species;
otherSpecies(IndexOfNotVirginica) = {'other'};
otherSpecies
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聚类和贝叶斯分类器 Matlab 的相关文章

  • 如何解释R中SVM的预测结果?

    我是 R 新手 我正在使用e1071R 中的 SVM 分类包 我使用了以下代码 data lt loadNumerical model lt svm data ncol data data ncol data gamma 10 print
  • 有没有办法在 Visual Studio 或 MATLAB 中“映射”程序执行顺序?

    我所说的 地图 是指我有一个 主 函数 它调用内部的许多其他程序 我希望能够看到哪个文件首先运行 第二个 第三个等等 基本上 我希望能够请参阅这个大型 OOP 设计程序 创建者没有为其制作 UML 类图 中的依赖项列表和顺序 以帮助破译代码
  • 在 MATLAB 中高效地形成动态窗口

    有人可以帮助我提供一种有效的方法 或者帮助我执行提供的代码 以尽可能少的步骤获得相同的结果 我将感激你 我有一个原始数组 A 1 1 1 4 3 4 5 4 4 3 3 1 0 0 2 6 2 6 3 6 6 2 7 4 8 7 2 2 2
  • 优化数组压缩

    假设我有一个数组k 1 2 0 0 5 4 0 我可以按如下方式计算掩码m k gt 0 1 1 0 0 1 1 0 仅使用掩码 m 和以下操作 左移 右移 And Or 加 减 乘 我可以将 k 压缩为以下形式 1 2 5 4 以下是我目
  • 使用 lsqcurvefit 进行拟合

    我想将一些数据拟合到洛伦兹函数 但当我使用不同数量级的参数时 我发现拟合存在问题 这是我的洛伦兹函数 function value lorentz x x0 gamma amp value amp gamma 2 x x0 2 gamma
  • 数组中 2 个百分位之间的平均元素

    我有 2 个长度为 200 的向量 例如 A 和 B 然后我使用以下方法找到数组 A 的每第二个百分位数 A1 prctile A 1 2 100 1 这样A1是一个长度为50的数组 现在我想找到A1中每两个元素内的A元素的平均值 即A的第
  • 带 if 语句的可向量化 FIND 函数 MATLAB

    我有一个矩阵u 我想遍历所有行和所有列并执行以下操作 如果元素非零 我返回行索引的值 如果元素为零 则查找该元素之后的下一个非零元素的行索引 我可以使用两个带有 find 函数的 for 循环轻松完成此操作 但我需要多次执行此操作 不是因为
  • MATLAB 中元胞数组的左连接

    I ve 2 cellMATLAB 中的数组 例如 A jim 4 paul 5 sean 5 rose 1 第二个 B jim paul george bill sean rose 我想做一个 SQL 左连接 这样我就可以得到 B 中的所
  • Matlab 中 interp2 的类似 OpenCV Api

    有没有类似的功能 其工作原理与 interp2 x y frame z xd yd linear 0 在 OpenCV 中 功能cv remap 几乎可以满足您的要求 请参阅文档here http docs opencv org modul
  • MATLAB 链表

    有哪些可能的方法来实现链表MATLAB http en wikipedia org wiki MATLAB 注意 我问这个问题是为了教学价值 而不是实用价值 我意识到 如果您实际上在 MATLAB 中滚动自己的链表 那么您可能做错了什么 然
  • MATLAB 在 MATLAB 7.10.0 学生版中似乎找不到 csaps()

    我有一些代码使用csaps Matlab的三次平滑样条拟合函数 http www mathworks com help toolbox curvefit csaps html我想将其提供给使用 MATLAB 7 10 0 R2010a 的学
  • 在 matlab/octave 中将数据集分成两个子集 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 将数据集分为两个子集 例如 训练 和 测试 其中 训练集包含 80 的数据 测试集包含剩余的 20 分裂的意思是生成一个长度等于的逻辑索引
  • Microsoft Visual C++ 2008 和 R2007b 的 Mex 类型

    我想对 vs2008 和 matlab2007b 使用 mex 类型 我尝试了下面的代码 include
  • 整数的十进制表示形式中的分隔数字

    例如 我想将用户输入作为整数输入 45697 并将前两位数字存储在数组 向量或其他内容中 例如 4 5 6 9 7 这样我就可以使用一些函数调用来检查前两个值 4 5 并对它们进行计算 问题 我不知道如何存储恢复前两个值 有没有简单的函数调
  • 如何从绘图处理程序中绘图?

    我有绘图的处理程序或图形的处理程序 例子 h plot 1 0 2 10 xx get h xx DisplayName Annotation 1x1 handle Color 0 0 1 LineStyle LineWidth 0 500
  • 通过傅里叶空间填充进行插值

    我最近尝试在 matlab 上实现一个在傅立叶域中使用零填充的插值方法的简单示例 但我无法正常工作 我总是有一个小的频移 在傅里叶空间中几乎不可见 但它在时空上产生了巨大的误差 由于傅里叶空间中的零填充似乎是一种常见 且快速 的插值方法 因
  • python 正弦和余弦精度

    如何提高Python正弦和余弦精度 例如 我想使用以下代码 只需计算随机复向量 x 的 y cos acos x import numpy as np N 100000 x np zeros N 1j np zeros N for k in
  • 哪种数据聚类算法适合检测时间序列事件中未知数量的聚类?

    这是我的场景 考虑在不同地点和时间发生的一组事件 例如 考虑有人在高空记录暴风雨期间城市中的雷击 就我的目的而言 闪电是瞬时的 只能击中某些位置 例如高层建筑 还可以想象每次雷击都有一个唯一的 ID 以便以后可以参考该雷击 这个城市大约有1
  • 频域和空间域的汉明滤波器

    我想通过在 MATLAB 中应用汉明滤波器来消除一维信号中的吉布斯伪影 我所拥有的是k1这是频域中的信号 我可以通过应用 DFT 来获取时域信号k1 s1 ifft ifftshift k1 该信号具有吉布斯伪影 现在 我想通过 A 乘以汉
  • 优化 MATLAB 代码(嵌套 for 循环计算相似度矩阵)

    我正在 MATLAB 中基于欧几里德距离计算相似度矩阵 我的代码如下 for i 1 N M N is the size of the matrix x for whose elements I am computing similarit

随机推荐