我试图看看两者的表现是否可以根据他们的目标函数进行比较?
因此,我正处于下一步的交叉路上,我开始学习并在复杂的数据集上应用一些机器学习算法,现在我已经完成了这项工作.我的计划从一开始就是结合两种可能的分类器,试图建立一个多分类系统.
但这里是我被困的地方.我选择聚类算法(模糊C均值)(在学习一些样本K均值之后)和朴素贝叶斯作为MCS(多分类系统)的两个候选者.
我可以独立使用它们来对数据进行分类,但我正在努力以有意义的方式将两者结合起来.
例如,模糊聚类几乎捕获所有"蓝精灵"攻击,除了通常一个,我不知道为什么它没有抓住这个奇怪的球,但我所知道的是它没有.其中一个集群将由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)
Run Code Online (Sandbox Code Playgroud)
我在想的是手动将target_class
所有正常的流量和不是蓝精灵的攻击转换为其他流量.然后我已经知道FCM正确地对除了一个smurf攻击之外的所有类别进行分类,我只需要在剩余的集群上使用朴素的贝叶斯分类器.
例如:
群集1 = 500个smurf攻击(重复此步骤可能会将1000个样本中的"大多数"smurf攻击转移到不同的群集中,因此我必须检查或迭代群集中的最大大小,一旦找到我可以将其从朴素的贝叶斯分类器阶段)
然后我在每个剩余的集群上测试分类器(不知道如何在matlab中进行循环等)所以此刻我必须在处理过程中手动选择它们.
clusters = 4;
CM = colormap(jet(clusters));
options(1) = 12.0;
options(2) = …
Run Code Online (Sandbox Code Playgroud) matlab classification cluster-analysis bayesian fuzzy-c-means
我正在使用 package.json 运行模糊 C 均值聚类e1071
。我想根据以下公式给出的模糊性能指数(FPI)(模糊程度)和归一化分类熵(NCE)(特定类别的混乱程度)来确定最佳簇数
其中 c 是聚类数,n 是观测值数,\xce\xbc ik是模糊隶属度,log a是自然对数。
\n我正在使用以下代码
\nlibrary(e1071)\nx <- rbind(matrix(rnorm(100,sd=0.3),ncol=2),\n matrix(rnorm(100,mean=1,sd=0.3),ncol=2))\ncl <- cmeans(x,2,20,verbose=TRUE,method="cmeans")\ncl$membership\n
Run Code Online (Sandbox Code Playgroud)\n我已经能够提取 \xce\xbc ik即模糊隶属度。现在,cmeans
必须针对不同数量的簇(例如 2 到 6),并且必须计算 FPI 和 NCE 以获得如下图所示的图
在R中如何实现呢?
\n编辑
\niris
我已使用以下代码尝试了@nya为数据集提供的代码
df <- scale(iris[-5])\n\nFPI <- function(cmem){\n c <- ncol(cmem)\n n <- nrow(cmem)\n \n 1 - (c / (c - 1)) * (1 - sum(cmem^2) / n)\n}\n\nNCE <- function(cmem){\n c <- ncol(cmem)\n n …
Run Code Online (Sandbox Code Playgroud)