【问题标题】:ELKI: Running DBSCAN on custom Objects in JavaELKI:在 Java 中的自定义对象上运行 DBSCAN
【发布时间】:2015-09-02 18:58:55
【问题描述】:

我正在尝试在 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
}

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

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

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

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

【问题讨论】:

    标签: java cluster-analysis dbscan elki


    【解决方案1】:

    ELKI 具有模块化架构。

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

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

    如果您的实际数据是浮点数,我建议改用DoubleVectorFloatVector,而只需使用例如SubspaceEuclideanDistanceFunction 仅处理您要使用的那些属性。

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-01
      • 1970-01-01
      • 2015-11-10
      • 2016-01-12
      • 2013-07-15
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      相关资源
      最近更新 更多