Java、Weka、および IP アドレスをいじっています。現在、データセットを使用して階層的クラスタリングを実行しようとしています: ソースと宛先の IPv4 (10 進数に変換) とプロトコル - すべて 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
私は何か間違ったことをしていますか、それとも...このようなデータセットをクラスタリングするという全体的な考えはばかげていますか?