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

时间:2019-06-04 13:10:36

标签: java cluster-analysis elki distance-matrix

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

我已经阅读了ELKI文档,并指出扩展distance类时可以覆盖AbstractNumberVectorDistanceFunction方法。

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 个答案:

答案 0 :(得分:0)

如果输入数据是数字矢量,则

AbstractNumberVectorDistanceFunction是相应的父类,仅 。如果您的数据类型是抽象对象标识符,请改为子类AbstractDBIDRangeDistanceFunction。然后,您必须实现

double distance(int i1, int i2);

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

另请参阅:https://elki-project.github.io/howto/precomputed_distances 尤其是标题为“不使用原始数据使用”的部分,关于当您仅使用距离矩阵时如何建立不包含原始数据的数据库。