ELKI:运行 Java 中自定义对象的 DBSCAN

ELKI: Running DBSCAN on custom Objects in Java

我正在尝试从 JAVA 到 运行 DBSCAN 中使用 ELKI。为了进行测试,我使用了 FileBasedDatabaseConnection。现在我想 运行 DBSCAN 将我的自定义对象作为参数。

我的对象具有以下结构:

public class MyObject {
  private Long id;
  private Float param1;
  private Float param2;
  // ... and more parameters as well as getters and setters
}

我想在 ELKI 中 运行 DBSCAN 使用 List<MyObject> 作为数据库,但只应考虑一些参数(例如 运行ning DBSCAN on the使用参数 param1、param2 和 param4 的对象)。理想情况下,生成的簇包含整个对象。

有什么方法可以实现这种行为吗?

如果不是,我如何将对象转换成 ELKI 理解的格式并允许我将生成的集群对象与我的自定义对象相匹配(即是否有一种简单的方法来以编程方式设置标签)?

以下问题涉及特征向量:Using ELKI on custom objects and making sense of results
这可能是我的问题的可能解决方案吗?我的 List<MyObject> 是如何创建特征向量的?

ELKI 具有模块化架构。

如果您想要自己的数据源,请查看 datasource 包,并实现 DatabaseConnection (JavaDoc) 接口。

如果你想处理 MyObject 个对象(你上面分享的 class 可能会对性能产生重大影响),这并不是特别困难。 SimpleTypeInformation<MyObject> (JavaDoc) to identify your data type, and implement a PrimitiveDistanceFunction (JavaDoc) 您的 数据类型。

如果您的实际数据是浮点数,我建议使用 DoubleVector or FloatVector instead, and just use e.g. SubspaceEuclideanDistanceFunction 来仅处理您要使用的那些属性。

对于这些数据类型和许多距离函数,可以使用 R*-tree 索引大大加快 DBSCAN 执行时间。

A Cluster (JavaDoc) in ELKI never stores the point data. It only stores point DBIDs (Wiki). You can get the point data from the Database relation, or use e.g. offsets (Wiki) 将它们映射回静态数据库的列表位置。