1

我在玩 Java、Weka 和 IP 地址。现在我正在尝试使用数据集进行层次聚类:源和目标 IPv4(转换为十进制)和协议 - 均来自 Wireshark 日志。

我将地址和协议保存在列表中,并以手动方式构建数据集

    FastVector atts = new FastVector();
    atts.addElement(new Attribute("from"));
    atts.addElement(new Attribute("to"));
    atts.addElement(new Attribute("protocol", (FastVector)null));
    Instances data = new Instances("Connections", atts, 0);

    for (int i=0; i<50; i++) {
        double[] vals = new double[data.numAttributes()];
        // Get address from list and with special method convert it to long
        vals[0] = from.get(i).getDecimal();
        vals[1] = to.get(i).getDecimal();
        // Protocol - String like "TCP"
        vals[2] = data.attribute(2).addStringValue(protocol.get(i));
        data.add(new Instance(1.0, vals));
     }

    HierarchicalClusterer hc = new HierarchicalClusterer();
    //hc.setDebug(true);
    hc.setPrintNewick(true);
    hc.setNumClusters(4);
    hc.buildClusterer(data);

    System.out.print(hc);

当我从数据中打印一些随机实例时,我可以看到一切正常。但是在聚类的输出中只有关于协议的信息。例如(这只是一小部分)。

集群 1 ((MSNMS:0,MSNMS:0):0,MSNMS:0)

带有调试选项的输出类似于

合并 0 4 0.0 0.0

合并 0 5 0.0 0.0

合并 1 7 0.0 0.0

我做错了什么还是......像这样聚类数据集的整个想法只是愚蠢的?

4

0 回答 0