我有一个距离矩阵,我想在对数据进行聚类时使用该距离矩阵。
我已经阅读了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聚类时如何正确使用距离矩阵。
答案 0 :(得分:0)
AbstractNumberVectorDistanceFunction
是相应的父类,仅 。如果您的数据类型是抽象对象标识符,请改为子类AbstractDBIDRangeDistanceFunction
。然后,您必须实现
double distance(int i1, int i2);
已经存在用于预先计算的距离的距离函数的不同实现,例如DiskCacheBasedDoubleDistanceFunction
,用于内存映射存储在磁盘上的距离矩阵。不过,我们应该添加一个DoubleMatrixDistanceFunction
,以便直接从Java使用(在下一版本中,所有类名和包名都会缩短,顺便说一句)。
另请参阅:https://elki-project.github.io/howto/precomputed_distances 尤其是标题为“不使用原始数据使用”的部分,关于当您仅使用距离矩阵时如何建立不包含原始数据的数据库。