Java 在Weka中获取集群分配

Java 在Weka中获取集群分配,java,cluster-analysis,weka,k-means,Java,Cluster Analysis,Weka,K Means,我有一个CSV文件,如下所示: id,at1,at2,at3 1072,0.5,0.2,0.7 1092,0.2,0.5,0.7 ... 我已将其加载到Weka中进行集群: DataSource source = new DataSource("test.csv"); Instances data = source.getDataSet(); kmeans.buildClusterer(data); 问题1:如何将第一列设置为ID?即,出于集群目的忽略第一列 然后我尝试打印作业: int[]

我有一个CSV文件,如下所示:

id,at1,at2,at3
1072,0.5,0.2,0.7
1092,0.2,0.5,0.7
...
我已将其加载到Weka中进行集群:

DataSource source = new DataSource("test.csv");
Instances data = source.getDataSet();
kmeans.buildClusterer(data);
问题1:如何将第一列设置为ID?即,出于集群目的忽略第一列

然后我尝试打印作业:

int[] assignments = kmeans.getAssignments();
int i = 0;
for (int clusterNum : assignments) {
    System.out.printf("Instance %d -> Cluster %d \n", i, clusterNum);
    i++;
}
这张照片是:

Instance 1 -> Cluster 0 
Instance 2 -> Cluster 2
...
问题#2:打印作业时,我如何引用ID?例如:

Instance 1072 -> Cluster 0
Instance 1092 -> Cluster 2

如果您使用Windows版本的Weka和GUI,您的生活会轻松得多

在“群集”选项卡中,有一个用于忽略ID等属性的按钮


以及Id到群集分配;使用所选的聚类算法后,右键单击屏幕左侧的结果,然后可视化结果,然后保存

如果您使用Windows版本的Weka和GUI,您的生活会轻松得多

在“群集”选项卡中,有一个用于忽略ID等属性的按钮


以及Id到群集分配;使用所选的聚类算法后,右键单击屏幕左侧的结果,然后可视化结果,然后保存

我意识到这是一个老问题,但我来这里也是为了寻找答案,然后我自己就能够找到答案,所以把我的解决方案放在这里,供下一个有这个问题的人使用。在我的例子中,集群组件是Java应用程序的一部分,因此我没有使用Weka工作台的选项。下面是我在集群分配中提取id的步骤

int[] assignments = kmeans.getAssignments();
for (int i = 0; i < assignments; i++) {
  int id = (int) data.instance(i).value(0); // cast from double
  System.out.printf("ID %d -> Cluster %d \n", id, assignments[i]);
}
int[]assignments=kmeans.getAssignments();
对于(int i=0;iCluster%d\n”,ID,assignments[i]);
}

与OP不同,我没有从DataSource.getDataSet()构建实例,而是从数据库表手动构建,但id字段也是我的第一个字段,因此我认为上面的代码应该可以工作。我有一个自定义的距离函数,在计算相似度时跳过了id字段。

我意识到这是一个老问题,但我来这里也是为了寻找答案,然后我自己就能够找到答案,所以将我的解决方案放在这里,供下一个遇到这个问题的人使用。在我的例子中,集群组件是Java应用程序的一部分,因此我没有使用Weka工作台的选项。下面是我在集群分配中提取id的步骤

int[] assignments = kmeans.getAssignments();
for (int i = 0; i < assignments; i++) {
  int id = (int) data.instance(i).value(0); // cast from double
  System.out.printf("ID %d -> Cluster %d \n", id, assignments[i]);
}
int[]assignments=kmeans.getAssignments();
对于(int i=0;iCluster%d\n”,ID,assignments[i]);
}

与OP不同,我没有从DataSource.getDataSet()构建实例,而是从数据库表手动构建,但id字段也是我的第一个字段,因此我认为上面的代码应该可以工作。我有一个自定义的距离函数,在计算相似性时跳过id字段。

聚类如何??为了集群的目的,您是否忽略了id列??!!谢谢,你帮了我的忙!虽然是小事;我将
I
更改为
I
以使其工作。集群如何??为了集群的目的,您是否忽略了id列??!!谢谢,你帮了我的忙!虽然是小事;我更改了
I
I
以使其正常工作。