使用 ELKI 聚类多个属性

Clustering Multiple Attributes with ELKI

我使用 ELKI 框架对一系列点进行聚类,这些点由它们的地理坐标(经度、纬度)定义。我使用的算法是DBSCAN。

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

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

实际上,我尝试在 ELKI 中这样做,但我遇到了一个具体问题。 聚类算法期望 "database" 作为输入。

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 数组来存储两个地理坐标 的数值属性。像这样:

数组[][][]

如果要对实例进行加权,应切换到 GeneralizedDBSCAN,并实施加权 CorePredicate

double[rows][cols]

没问题。您有三列:经度、纬度、权重。

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

或者,您可以构建自己的 DatabaseConnection。它可以 return 两个 关系:一个是包含纬度和经度的二维向量场,第二个是仅包含权重的一维关系。但是处理多个关系可能很棘手。以上方法比较好用。