r - DBSCAN(基于密度的聚类)描述 eps 的度量单位

r - DBSCAN (Density Based Clustering) describe unit of measure for eps

我试图使用 R 中的 dbscan 包来尝试对一些空间数据进行聚类。 dbscan::dbscan 函数将 epsminpts 作为输入。我有一个包含两列 longitudelatitude 的数据框,用小数表示,如下所示:

df <- data.frame(lon = c(seq(1,5,1), seq(1,5,1)), 
                   lat = c(1.1,3.1,1.2,4.1,2.1,2.2,3.2,2.4,1.4,5.1))

我应用算法:

 db <- fpc::dbscan(df, eps = 1, MinPts = 2)

这里的 eps 是以度数还是其他单位来定义的?我真的很想了解这个最大距离 eps 值是以哪个单位表示的,因此感谢您的帮助

切勿使用 fpc 包,始终使用 dbscan::dbscan

如果你有纬度和经度,你需要选择合适的距离函数,例如半正弦。

默认距离函数欧几里得忽略了地球的球形特性。 eps 值是纬度和经度的混合,但这些并不对应于统一的距离!赤道以东 1 度比温哥华以东 1 度

即便如此,你也需要注意单位。 Haversine 的一种实现可能会产生弧度,另一种可能会产生一米,当然有些疯狂的人会以英里为单位工作。

不幸的是,据我所知,none 的 R 实现可以加速 Haversine 距离。因此,在 ELKI 中对数据进行聚类可能 很多(不过您需要自己添加索引)。

如果您的数据足够小,您可以在 R 中使用预先计算的距离矩阵(dist 对象)。但这将占用 O(n²) 的时间和内存,因此它的可扩展性不是很好。