gpt4 book ai didi

java - ELKI获取聚类数据点

转载 作者:行者123 更新时间:2023-11-30 03:01:50 25 4
gpt4 key购买 nike

当我使用 elki 时,如何获取 kmeans (llyod) 集群中的数据点质心

我还可以将这些点插入距离函数之一并获取任意两个点之间的距离吗?

这个问题是不同的,因为我的问题的主要焦点是检索数据点,而不是自定义数据点。另外,另一个线程上的答案目前还不完整,因为它指的是目前无法运行的维基。此外,我想具体知道需要做什么,因为所有库的文档都有点像白费力气,如果您知道/理解该库,您将直接与回答这样其他有同样问题的人也可以有一个很好的引用资料来引用,而不是试图找出库。

最佳答案

一个Cluster (JavaDoc) 在 ELKI 中从不存储点数据。它只存储点DBIDs (Wiki),您可以使用 getIDs() 方法获取。要获取原始数据,您需要Relation从您的数据库中。 getModel() 方法返回集群模型,对于 kmeans 来说是 KMeansModel .

您可以通过其DBID从数据库Relation中获取点数据,或根据两个DBID计算距离。

KMeans 的质心很特殊 - 它不是数据库对象,而始终是一个数值 vector - 簇的算术平均值。使用 KMeans 时,您应该使用 SquaredEuclideanDistanceFunction 。这是NumberVectorDistanceFunction ,它具有方法 distance(NumberVector o1, NumberVector o2) (并非所有距离都适用于数字 vector !)。

Relation<? extends NumberVector> rel = ...;
NumberDistanceFunction df = SquaredEuclideanDistanceFunction.STATIC;

... run the algorithm, then iterate over each cluster: ...

Cluster<KMeansModel> cluster = ...;
Vector center = cluster.getModel().getMean();
double varsum = cluster.getModel().getVarianceContribution();

double sum = 0.;
// C++-style for loop, for efficiency:
for(DBIDRef id = cluster.getIDs().iterDBIDs(); id.valid(); id.advance()) {
double distance = df.distance(relation.get(id), center);
sum += distance;
}

System.out.println(varsum+" should be the same as "+sum);

关于java - ELKI获取聚类数据点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35758909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com