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

时间:2018-06-13 13:49:17

标签: r cluster-analysis dbscan

我试图使用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,所以任何帮助都值得赞赏

1 个答案:

答案 0 :(得分:1)

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

如果您有纬度和经度,则需要选择合适的距离函数,例如Haversine。

默认距离函数Euclidean忽略了地球的球形特性。然后,eps值是纬度和经度的混合,但这些不对应于均匀距离!在赤道以东一度,在温哥华东部的距离远超过一度

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

不幸的是,据我所知,没有一个R实现可以加速Haversine距离。因此,将数据集中在ELKI中可能会更快更多(您需要自己添加索引)。

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