我使用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数组来存储两个地理坐标和数字属性。像这样:
阵列[] [] []
答案 0 :(得分:2)
如果你想对实例加权,你应该切换到GeneralizedDBSCAN,并实现加权CorePredicate。
double[rows][cols]
很好。你有三列:经度,替补,重量。
DimensionSelectingLatLngDistanceFunction也可以使用3D矢量。 您只需指定列纬度以及存储的列经度。
或者,您可以构建自己的DatabaseConnection
。它可以返回两个关系:一个是包含纬度和经度的二维矢量场,第二个是仅包含权重的一维关系。但是处理多种关系可能很棘手。以上方法更易于使用。