1

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

我已经阅读了 ELKI 文档,它声明我可以在扩展类distance时覆盖该方法。AbstractNumberVectorDistanceFunction

然而distance,该类返回坐标。所以从坐标 x 到坐标 y。这很麻烦,因为距离矩阵只填充了距离值,我们使用索引来找到从index x到的距离值index 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 进行聚类时正确使用距离矩阵。

4

1 回答 1

0

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

double distance(int i1, int i2);

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

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

于 2019-06-05T08:16:01.383 回答