Java ELKI获取聚类数据点

Java ELKI获取聚类数据点,java,cluster-analysis,k-means,elki,Java,Cluster Analysis,K Means,Elki,使用elki时,如何获取kmeans(llyod)簇中的数据点和质心 我还可以把这些点插入其中一个距离函数,得到任意两个点之间的距离吗 这个问题不同,因为我问题的主要焦点是检索数据点,而不是自定义数据点。另外,另一个线程上的答案目前还不完整,因为它指的是一个目前不起作用的wiki。此外,我想知道具体需要做什么,因为所有库的文档都有点像白鹅追逐,如果你知道/理解库,你会直接给出答案,这样其他有同样问题的人也可以有一个很好的可靠的参考,而不是试图找出库,这将是非常感谢的。aELKI中的(JavaDo

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

我还可以把这些点插入其中一个距离函数,得到任意两个点之间的距离吗

这个问题不同,因为我问题的主要焦点是检索数据点,而不是自定义数据点。另外,另一个线程上的答案目前还不完整,因为它指的是一个目前不起作用的wiki。此外,我想知道具体需要做什么,因为所有库的文档都有点像白鹅追逐,如果你知道/理解库,你会直接给出答案,这样其他有同样问题的人也可以有一个很好的可靠的参考,而不是试图找出库,这将是非常感谢的。

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

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

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


relationship当这个问题提到DBSCAN时,答案包括访问对象。对于分层聚类,这个问题也是:@Anony Mousse在示例文档中,它使用
getoffset
命令并返回数字。它们是与其在数据库中的位置相关的数据点吗?我如何获取中心每个集群的oid?(顺便说一句,图书馆的所有网站都关闭了,我不认为它只是在我这边).当你得到平均值时,不是每个簇都不同吗?也许我还没有完全理解代码,但看起来你只是使用了一个质心作为距离函数,当距离中心的平均距离,首先得到每个点距离其质心的距离,然后将这些距离相加。Varsum是否也等于summat每个点距离其群集中心的距离是多少?此代码段处理单个群集(
cluster!=Clustering
);您仍然需要另一个
,才能在所有集群上循环。@ErichSchubert此信息非常有用。我在DBSCAN上遇到了一个问题。由于ELKI用户邮件列表不是英文的,我不知道如何向您提出这个问题。您能告诉我是否可以通过某种方式与您联系吗?我的问题是我尝试了Apache math3 DBSCANCluster呃,得到了我预期的结果,但我不知道如何使用ELKI的DBSCAN获得同样的结果。我可以发布一个stackoverflow问题,但真的需要像你这样的专家来帮助。我们有数亿的数据集——我们担心这些方法可能无法工作。
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);