聚类与matlab

聚类与matlab,matlab,machine-learning,cluster-analysis,data-mining,fuzzy,Matlab,Machine Learning,Cluster Analysis,Data Mining,Fuzzy,我正在尝试对KDD1999 cup数据集中的一些数据进行聚类 文件的输出如下所示: 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. 这种格式有48000条不同的记录。我已经清理了数据,删除了只保留数字的文本。现在输出如下所示: 我在excel中创建了

我正在尝试对KDD1999 cup数据集中的一些数据进行聚类

文件的输出如下所示:

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.
这种格式有48000条不同的记录。我已经清理了数据,删除了只保留数字的文本。现在输出如下所示:

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

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

有人能帮我找到集群吗?我是matlab新手,所以没有任何经验,而且我对集群也是新手

方法:

  • 选择的簇数(K)
  • 初始化质心(从数据集中随机选择K个图案)
  • 将每个图案指定给具有最近质心的簇
  • 计算每个簇作为其新质心的平均值
  • 重复步骤3,直到满足停止条件(没有模式移动到其他群集)
  • 这就是我想要实现的目标:

    这就是我得到的:

    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杯'99)中使用的,所以不要指望它会很容易

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

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

    首先,您需要将属性规格化为相同的比例:当计算欧几里德距离作为方法步骤3的一部分时,具有
    239
    486
    等值的特征将主导其他具有
    0.05
    等较小值的特征,从而破坏结果

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


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

    真的不知道我做错了什么吗?您可以在代码中包含生成集群的部分吗?为什么这部分用“C”标记?