【问题标题】:Get cluster assignments in Weka在 Weka 中获取集群分配
【发布时间】:2014-07-15 09:15:24
【问题描述】:

我有一个 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? IE。出于聚类目的而忽略第一列。

然后我尝试打印出作业:

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

【问题讨论】:

    标签: java cluster-analysis weka k-means


    【解决方案1】:

    我意识到这是一个老问题,但我也来到这里寻找答案,然后自己弄清楚了,所以把我的解决方案放在这里给下一个遇到这个问题的人。在我的例子中,集群组件是 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]);
    }
    

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

    【讨论】:

    • 集群怎么样??您是否为了聚类目的而忽略了 id 列??!!
    • 谢谢,你帮了我!不过小事;我将i &lt; assignments 更改为i &lt; assignment.lengths 以使其正常工作。
    【解决方案2】:

    如果您使用带有 GUI 的 Windows 版本的 Weka,您的生活会轻松很多。

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

    对于 Id 进行聚类分配;完成您选择的聚类算法后,右键单击屏幕左侧的结果,然后可视化结果然后保存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-18
      • 2012-12-21
      • 2021-03-04
      • 2017-10-06
      • 2011-07-26
      • 2019-05-01
      • 2015-06-04
      • 1970-01-01
      相关资源
      最近更新 更多