如何使用带有 ELKI 库的距离矩阵对数据进行聚类?

Posted

技术标签:

【中文标题】如何使用带有 ELKI 库的距离矩阵对数据进行聚类?【英文标题】:How can I cluster data using a distance matrix with the ELKI library? 【发布时间】:2019-10-20 00:39:20 【问题描述】:

我有一个距离矩阵,我想在对数据进行聚类时使用该距离矩阵。

我已阅读 ELKI 文档,其中指出我可以在扩展 AbstractNumberVectorDistanceFunction 类时覆盖 distance 方法。

distance 类返回坐标。所以从坐标 x 到坐标 y。这很麻烦,因为距离矩阵只填充了距离值,我们使用索引来查找从index xindex y 的距离值。这是文档中的代码:

public class TutorialDistanceFunction extends AbstractNumberVectorDistanceFunction 
  @Override
  public double distance(NumberVector o1, NumberVector o2) 
    double dx = o1.doubleValue(0) - o2.doubleValue(0);
    double dy = o1.doubleValue(1) - o2.doubleValue(1);
    return dx * dx + Math.abs(dy);
  

我的问题是如何在使用 ELKI 进行聚类时正确使用距离矩阵。

【问题讨论】:

【参考方案1】:

AbstractNumberVectorDistanceFunction 是适当的父类如果您的输入数据是数字向量。如果您的数据类型是抽象对象标识符,则改为子类AbstractDBIDRangeDistanceFunction。然后你必须实现

double distance(int i1, int i2);

对于预先计算的距离,已经有不同的距离函数实现,例如DiskCacheBasedDoubleDistanceFunction,它对存储在磁盘上的距离矩阵进行内存映射。不过,我们应该添加一个DoubleMatrixDistanceFunction,以便在 Java 中直接使用(在下一个版本中,所有类名和包名都将缩短,顺便说一句)。

另见:https://elki-project.github.io/howto/precomputed_distances 特别是标题为“在没有原始数据的情况下使用”的部分,介绍了在仅使用距离矩阵时如何设置没有原始数据的数据库。

【讨论】:

这是否支持非对称矩阵?

以上是关于如何使用带有 ELKI 库的距离矩阵对数据进行聚类?的主要内容,如果未能解决你的问题,请参考以下文章

OPTICS 聚类算法的 ELKI 实现只检测到一个聚类

使用 ELKI 和 Mongodb

如何在 ELKI 中使用现有数据

使用 ELKI 的距离函数

通过 Mahalanobis 距离使用距离矩阵进行聚类

使用 DTW 距离矩阵的凝聚聚类