RBo*_*RBo 5 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
}
Run Code Online (Sandbox Code Playgroud)
我想使用List<MyObject>as数据库在ELKI中运行DBSCAN ,但是只应考虑一些参数(例如,使用参数param1,param2和param4在对象上运行DBSCAN).理想情况下,生成的集群包含整个对象.
有没有办法实现这种行为?
如果没有,我如何将对象转换为ELKI理解的格式,并允许我将生成的集群对象与我的自定义对象进行匹配(即,是否有一种以编程方式设置标签的简单方法)?
以下问题涉及featureVectors:在自定义对象上使用ELKI并理解结果
这可能是我的问题的可能解决方案吗?如何创建一个特征向量List<MyObject>?
ELKI 具有模块化架构。
如果您想要自己的数据源,请查看datasource包并实现DatabaseConnection(JavaDoc) 接口。
如果您想处理MyObject对象(上面共享的类可能会对性能产生重大影响),这并不是特别困难。您需要一个SimpleTypeInformation<MyObject>(JavaDoc) 来标识您的数据类型,并为您的数据类型实现一个PrimitiveDistanceFunction(JavaDoc) 。
如果您的实际数据是浮点数,我建议使用DoubleVectororFloatVector代替,并且只使用 egSubspaceEuclideanDistanceFunction来处理您想要使用的那些属性。
对于这些数据类型和许多距离函数,可以使用 R* 树索引来显着加快 DBSCAN 的执行时间。
ClusterELKI中的A (JavaDoc)从不存储点数据。它只存储点DBIDs(维基)。您可以从数据库关系中获取点数据,或者使用例如偏移量(Wiki)将它们映射回静态数据库的列表位置。