1

我使用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);

最后,这个数据库连接从一个二维数组中读取数据:

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

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

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

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

大批[][][]

4

1 回答 1

2

如果你想给实例增加权重,你应该切换到 GeneralizedDBSCAN,并实现一个加权的CorePredicate

double[rows][cols]

很好。您有三列:经度、纬度、重量。

DimensionSelectingLatLngDistanceFunction也可以处理 3D 矢量。您只需指定在哪一列中存储纬度,在哪一列中存储经度。

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

于 2015-11-11T08:58:27.980 回答