matlab - 聚类和matlab

标签 matlab machine-learning cluster-analysis data-mining fuzzy

我正在尝试对来自 KDD 1999 杯数据集的一些数据进行聚类

文件的输出如下所示:

0,tcp,http,SF,239,486,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,8,8,0.00,0.00,0.00,0.00,1.00,0.00,0.00,19,19,1.00,0.00,0.05,0.00,0.00,0.00,0.00,0.00,normal.

有 48,000 条该格式的不同记录。我已经清理了数据并删除了仅保留数字的文本。输出现在看起来像这样:

enter image description here

我在 excel 中创建了一个逗号分隔的文件并保存为 csv 文件,然后在 matlab 中从 csv 文件创建了一个数据源,我尝试通过 matlab 中的 fcm 工具箱运行它(findcluster 输出 38 种数据类型,预计 38列)。

然而,这些集群看起来不像集群,或者它没有按照我需要的方式接受和工作。

谁能帮忙找到集群?我是 matlab 的新手,所以没有任何经验,而且我也是集群的新手。

方法:

  1. 选择的簇数 (K)
  2. 初始化质心(从数据集中随机选择的 K 个模式)
  3. 将每个模式分配给具有最近质心的集群
  4. 计算每个簇的均值作为其新的质心
  5. 重复第 3 步,直到满足停止条件(没有模式移动到另一个集群)

这就是我要实现的目标:

enter image description here

这是我得到的:

enter image description here

load kddcup1.dat
plot(kddcup1(:,1),kddcup1(:,2),'o')  
[center,U,objFcn] = fcm(kddcup1,2);
Iteration count = 1, obj. fcn = 253224062681230720.000000
Iteration count = 2, obj. fcn = 241493132059137410.000000
Iteration count = 3, obj. fcn = 241484544542298110.000000
Iteration count = 4, obj. fcn = 241439204971005280.000000
Iteration count = 5, obj. fcn = 241090628742523840.000000
Iteration count = 6, obj. fcn = 239363408546874750.000000
Iteration count = 7, obj. fcn = 238580863900727680.000000
Iteration count = 8, obj. fcn = 238346826370420990.000000
Iteration count = 9, obj. fcn = 237617756429912510.000000
Iteration count = 10, obj. fcn = 226364785036628320.000000
Iteration count = 11, obj. fcn = 94590774984961184.000000
Iteration count = 12, obj. fcn = 2220521449216102.500000
Iteration count = 13, obj. fcn = 2220521273191876.200000
Iteration count = 14, obj. fcn = 2220521273191876.700000
Iteration count = 15, obj. fcn = 2220521273191876.700000

figure
plot(objFcn)
title('Objective Function Values')
xlabel('Iteration Count')
ylabel('Objective Function Value')

    maxU = max(U);
    index1 = find(U(1, :) == maxU);
    index2 = find(U(2, :) == maxU);
    figure
    line(kddcup1(index1, 1), kddcup1(index1, 2), 'linestyle',...
    'none','marker', 'o','color','g');
    line(kddcup1(index2,1),kddcup1(index2,2),'linestyle',...
    'none','marker', 'x','color','r');
    hold on
    plot(center(1,1),center(1,2),'ko','markersize',15,'LineWidth',2)
    plot(center(2,1),center(2,2),'kx','markersize',15,'LineWidth',2)

最佳答案

由于您是机器学习/数据挖掘的新手,因此您不应该解决此类高级问题。毕竟,您正在使用的数据曾用于比赛(KDD Cup'99),所以不要指望这会很容易!

此外,数据旨在用于分类任务(监督学习),其目标是预测正确的类别(不良/良好连接)。您似乎对聚类(无监督学习)感兴趣,这通常比较困难。

这类数据集需要大量的预处理和巧妙的特征提取。人们通常利用领域知识(网络入侵检测)从原始数据中获得更好的特征。直接应用像 K-means 这样的简单算法通常会产生很差的结果。

对于初学者,您需要将属性标准化为相同的比例:在您的方法中作为步骤 3 的一部分计算欧氏距离时,具有 239 等值的特征>486 将支配具有较小值(如 0.05)的其他特征,从而破坏结果。

要记住的另一点是太多的属性可能是一件坏事(维数灾难)。因此,您应该研究特征选择或降维技术。

最后,我建议您熟悉一个更简单的数据集...

关于matlab - 聚类和matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7715891/

相关文章:

matlab - 在opencv中寻找熵

matlab - 如何检查元胞数组中的所有条目是否具有相同的大小?

matlab - table 的尺寸和高度/宽度有什么区别?

MATLAB 张量 : Append row and fill in NaN instead of 0 for empty elements

python-3.x - 在 Kaggle 上提交

python-3.x - Wine 质量数据集分析

Scikit-Learn:使用 DBSCAN 预测新点

python-3.x - 在TensorFlow中,函数 'axis'中的参数 'tf.one_hot'是什么

cluster-analysis - 使用光谱聚类对看不见的点进行聚类

c++ - OpenCV 聚类函数 cv KMeans2() - 数组中的聚类中心类型是什么?