使用ELKI聚类多个属性

时间:2015-11-10 15:58:20

标签: cluster-analysis dbscan elki

我使用ELKI框架聚类一系列由地理坐标(经度,纬度)定义的点。我使用的算法是DBSCAN。

现在我想添加另一个(数字)属性来衡量点的重要性(让我们说大小)。

理论上,这些点现在将在3维空间(而不是2D)中定义,距离将是地理距离和数据距离的混合。

在实践中,我试图在ELKI中这样做,但我陷入了一个具体的问题。 聚类算法需要一个"数据库"作为输入。

Clustering<DBSCANModel> de.lmu.ifi.dbs.elki.algorithm.AbstractAlgorithm.run(Database database)

此数据库是从LisParametrization创建的,其中包括读取数据库连接:

    params.addParameter(
        AbstractDatabase.Parameterizer.DATABASE_CONNECTION_ID, dbc);

最后,此数据库连接从2D数组中读取数据:

将现有数据矩阵(double[rows][cols])导入ELKI数据库。

    DatabaseConnection dbc = new ArrayAdapterDatabaseConnection(array[][]);

我的问题是:有没有办法用这个2D数组替换* D矩阵?

例如在我的情况下,我想使用3D数组来存储两个地理坐标数字属性。像这样:

阵列[] [] []

1 个答案:

答案 0 :(得分:2)

如果你想对实例加权,你应该切换到GeneralizedDBSCAN,并实现加权CorePredicate

double[rows][cols]

很好。你有三列:经度,替补,重量。

DimensionSelectingLatLngDistanceFunction也可以使用3D矢量。 您只需指定列纬度以及存储的列经度。

或者,您可以构建自己的DatabaseConnection。它可以返回两个关系:一个是包含纬度和经度的二维矢量场,第二个是仅包含权重的一维关系。但是处理多种关系可能很棘手。以上方法更易于使用。