【问题标题】:Retrieving centroid position of each cluster in a K-Mean Java program在 K-Mean Java 程序中检索每个簇的质心位置
【发布时间】:2016-06-15 08:33:05
【问题描述】:

我有一个 Java 程序,它将使用我从 here 找到的 K-Means 算法将坐标聚类为 2 组。我已经成功获取了每个组中的聚类元素,但是我不确定如何检索每个聚类的质心位置。

这是我的程序:

import java.util.List;
import com.aliasi.util.Arrays;
import java.util.ArrayList;

public class PrgMain {
    public static List cent = new ArrayList(); 

    public static void main (String args[]){
        List<DataPoint> dataPoints = new ArrayList<DataPoint>();
        dataPoints.add(new DataPoint(22,21,"p53"));
        dataPoints.add(new DataPoint(19,20,"bcl2"));
        dataPoints.add(new DataPoint(18,22,"fas"));
        dataPoints.add(new DataPoint(1,3,"amylase"));
        dataPoints.add(new DataPoint(2,2,"maltase"));

        JCA jca = new JCA(2,1000,dataPoints); 
        jca.startAnalysis();
        int i = 0;
        Centroid cen = null;

        for (List<DataPoint> tempV : jca.getClusterOutput()){
            System.out.println("-----------Cluster"+(i+1)+"---------");
            for (DataPoint dpTemp : tempV){
                System.out.println(dpTemp.getObjName()+
                                   "["+dpTemp.getX()+"," +dpTemp.getY()+"]");
                cen = new Centroid(dpTemp.getX(), dpTemp.getY());
            }
            i++;
            System.out.println("Centroid for cluster "+ (i)+": ");
            // Here's where I want to retrieve the centroid:
            System.out.println(cen.getCx()+", "+ cen.getCy());
        }
    }
}

有没有办法可以在聚类后检索质心位置?

【问题讨论】:

  • jca.getCluster[i].getCentroid() 应该是 woking
  • 谢谢,但是当我尝试输出它时“System.out.println(jca.getCluster(i).getCentroid());” ,我得到像“Centroid@1db9742”这样的输出。我做错了吗?
  • cen = jca.getCluster[i].getCentroid(); System.out.println(cen.getCx()+", "+ cen.getCy());

标签: java k-means centroid


【解决方案1】:

根据代码here,您可以通过这种方式访问​​质心 i:

cen = jca.getCluster[i].getCentroid(); 

然后打印坐标:

System.out.println(cen.getCx()+", "+ cen.getCy());

【讨论】:

    【解决方案2】:

    聚类后 - jca.startAnalysis(),您需要使用以下方法计算当前质心: (假设你想得到第一个簇的质心)

    Cluster c1 = jca.getCluster(0);
    Centroid cen1 = new Centroid(0,0);
    cen1.setCluster(c1);
    cen1.calcCentroid();
    System.out.println("Centroid for cluster 1: ");
    System.out.println(cen1.getCx()+", "+ cen1.getCy());
    

    【讨论】:

      猜你喜欢
      • 2016-05-05
      • 2017-09-12
      • 2021-03-03
      • 2012-11-17
      • 2018-10-11
      • 2017-05-01
      • 1970-01-01
      • 2012-11-03
      • 2014-05-02
      相关资源
      最近更新 更多