【问题标题】:ELKI get clustering data pointsELKI 获取聚类数据点
【发布时间】:2016-06-15 23:54:04
【问题描述】:

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

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

这个问题不同,因为我的问题的主要焦点是检索数据点,而不是自定义数据点。此外,另一个线程上的答案目前不完整,因为它指的是目前无法运行的 wiki。此外,我想具体了解需要做什么,因为所有库的文档有点像白痴,如果您知道/理解您将直接使用的库,将不胜感激回答,以便其他有相同问题的人也可以有一个很好的可靠参考来参考,而不是试图找出图书馆。

【问题讨论】:

  • 虽然这个问题提到了 DBSCAN,但答案涵盖了访问对象。 ELKI: Running DBSCAN on custom Objects in Java 层次聚类也是如此:stackoverflow.com/q/17687533/1060350
  • @Anony-Mousse 在示例文档中,它使用getoffset 命令并返回数字。它们是与其在数据库中的位置相关的数据点吗?我将如何获取每个集群的质心? (顺便说一句,图书馆的所有网站都关闭了,我不认为它只在我这边)。

标签: java cluster-analysis k-means elki


【解决方案1】:

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

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

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

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);

【讨论】:

  • 当你得到平均值时,它不会因集群而异吗?也许我没有完全理解代码,但看起来你只使用一个质心作为距离函数,当距离中心的平均距离时,首先获取每个点与其质心的距离,然后将这些距离相加。 Varsum 是否也等于每个点距其集群中心的距离之和?
  • 这段代码 sn-p 处理一个 single 集群 (Cluster != Clustering);你还需要另一个 for 循环遍历所有集群。
  • @ErichSchubert 此信息非常有用。我在 DBSCAN 上遇到问题。由于 ELKI 用户邮件列表不是英文的,我不知道如何向您提出问题。你能告诉我是否可以通过某种方式联系到你吗?我的问题是我尝试了 Apache math3 DBSCANClusterer 并得到了我预期的结果,但我不知道如何使用 ELKI 的 DBSCAN 获得相同的结果。我可以发布一个 stackoverflow 问题,但真的需要像你这样的专家来帮助解决这个问题。我们有数亿的数据集——我们担心这些方法可能行不通。
猜你喜欢
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 2016-06-06
  • 2013-03-07
  • 1970-01-01
  • 2018-07-15
相关资源
最近更新 更多