5

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

我的对象具有以下结构:

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

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

有没有办法实现这种行为?

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

以下问题谈到了 featureVectors:在自定义对象上使用 ELKI 并理解结果
这可能是我的问题的解决方案吗?以及如何从 my 中创建特征向量List<MyObject>

4

1 回答 1

3

ELKI 具有模块化架构。

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

如果您想处理MyObject对象(您在上面共享的类可能会对性能产生重大影响),这并不是特别难。您需要一个SimpleTypeInformation<MyObject>(JavaDoc) 来识别您的数据类型,并为您的数据类型实现一个PrimitiveDistanceFunction(JavaDoc) 。

如果您的实际数据是浮点数,我建议使用DoubleVectororFloatVector代替,并且仅使用 egSubspaceEuclideanDistanceFunction来处理您想要使用的那些属性。

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

ClusterELKI 中的 A (JavaDoc)从不存储点数据。它只存储点DBIDs(Wiki)。您可以从数据库关系中获取点数据,或使用例如偏移量(Wiki) 将它们映射回静态数据库的列表位置。

于 2015-06-18T07:53:25.407 回答