当前位置: 首页 > 知识库问答 >
问题:

在K-均值Java程序中检索每个簇的质心位置

夏侯旻
2023-03-14

我有一个Java程序,它将使用我从这里找到的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());
        }
    }
}

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

共有2个答案

佴普松
2023-03-14

集群之后-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());
龙志勇
2023-03-14

根据此处的代码,您可以通过以下方式访问质心i:

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

然后打印坐标:

System.out.println(cen.getCx()+", "+ cen.getCy());
 类似资料:
  • 我已经实现了一个函数,在运行K-Means聚类算法后,找到距离每个质心最近的数据点。我想知道是否有一个函数可以让我找到距离每个质心最近的M个点。

  • 我正在尝试使用python从头开始实现一个k-means聚类算法。我在更新每个簇的质心值时遇到问题。下面的代码显示了到目前为止我所处的位置。我最初将每个数据点聚类为k个聚类中的一个。所有数据包含329行;每一行是一个单词,后跟300个特征,后面是它被分配到的集群的编号(值1到4)。我在循环中尝试做的是首先创建一个数组A,该数组只保存分配给第一个集群的AllData中的行。然后我想取A中每个特征列的

  • 如何计算由像素组成的簇的质心? 我用它们的红色、蓝色和绿色值来表示像素(例如,)。 形心应该是集群中实例的平均值,但是如何计算像素之间的平均值呢? [我试图计算每种颜色的平均值(质心[“红色”]=总和\红色\像素\值/像素数等),但结果不正确] 如果有帮助的话,我用的是欧几里德距离函数。

  • 问题内容: 我正在尝试使用选定的初始质心进行k均值聚类。它说在这里 指定您的初始中心: 如果通过,它应该是形状(的,)并给出初始中心。 我在Python中的代码: 返回错误: 并返回相同的初始中心。任何想法如何形成初始中心以便可以被接受吗? 问题答案: 的默认行为是使用不同的随机质心多次初始化算法(即Forgy方法)。然后,随机初始化的数量由参数(docs)控制: n_init :int,默认值:

  • OpenCV中的K-Means聚类 作者|OpenCV-Python Tutorials 编译|Vincent 来源|OpenCV-Python Tutorials 目标 了解如何在OpenCV中使用cv.kmeans()函数进行数据聚类 理解参数 输入参数 sample:它应该是np.float32数据类型,并且每个功能都应该放在单个列中。 nclusters(K):结束条件所需的簇数 crit

  • 问题内容: 我想与Python解决方案共享这个特定的Apache Spark,因为它的文档非常有限。 我想通过KEY计算K / V对的平均值(存储在Pairwise RDD中)。示例数据如下所示: 现在,以下代码序列 并不是达到最佳效果的 方法,但它确实有效。这是我在寻找更好的解决方案之前所做的事情。这并不可怕,但是-如您将在答案部分中看到的- 有一种更简洁,有效的方法。 问题答案: 现在,更好的