使用 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 两个 关系:一个是包含纬度和经度的二维向量场,第二个是仅包含权重的一维关系。但是处理多个关系可能很棘手。以上方法比较好用。
我使用 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 两个 关系:一个是包含纬度和经度的二维向量场,第二个是仅包含权重的一维关系。但是处理多个关系可能很棘手。以上方法比较好用。