如何使用带有 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 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 进行聚类时正确使用距离矩阵。
【问题讨论】:
【参考方案1】:AbstractNumberVectorDistanceFunction
是适当的父类仅如果您的输入数据是数字向量。如果您的数据类型是抽象对象标识符,则改为子类AbstractDBIDRangeDistanceFunction
。然后你必须实现
double distance(int i1, int i2);
对于预先计算的距离,已经有不同的距离函数实现,例如DiskCacheBasedDoubleDistanceFunction
,它对存储在磁盘上的距离矩阵进行内存映射。不过,我们应该添加一个DoubleMatrixDistanceFunction
,以便在 Java 中直接使用(在下一个版本中,所有类名和包名都将缩短,顺便说一句)。
另见:https://elki-project.github.io/howto/precomputed_distances 特别是标题为“在没有原始数据的情况下使用”的部分,介绍了在仅使用距离矩阵时如何设置没有原始数据的数据库。
【讨论】:
这是否支持非对称矩阵?以上是关于如何使用带有 ELKI 库的距离矩阵对数据进行聚类?的主要内容,如果未能解决你的问题,请参考以下文章