ELKI:在Java中使用自定义对象运行DBSCAN

时间:2015-06-17 13:38:31

标签: java cluster-analysis dbscan elki

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

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

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

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

1 个答案:

答案 0 :(得分:3)

ELKI采用模块化架构。

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

如果您想处理MyObject个对象(您上面分享的课程可能会对性能造成重大影响),那并不是特别难。您需要SimpleTypeInformation<MyObject>(JavaDoc)来标识您的数据类型,您的数据类型实现PrimitiveDistanceFunction (JavaDoc)。

如果您的实际数据是花车,我建议您改用DoubleVectorFloatVector,并使用例如SubspaceEuclideanDistanceFunction仅处理您要使用的属性。

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

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