我想在一些GPS坐标上用R实现DBSCAN。我有一个距离矩阵(dist_matrix),我将其输入到以下函数中:
dbscan::dbscan(dis_matrix,eps=50,minPts = 5,borderPoints=TRUE) fpc::dbscan(dis_matrix,eps = 50,MinPts = 5,method = "dist")
我从这两个函数得到了非常不同的结果,无论是在聚类数方面,还是在一个点是噪声点还是属于一个聚类点方面。基本上,两种算法之间的结果是不一致的。我不知道为什么他们会产生如此不同的结果,尽管在这里我们可以看到http://www.sthda.com/english/wiki/wiki.php?id_contents=7940对于虹膜数据,两个函数做的是一样的。
我的距离矩阵[来自一个计算2000多个坐标之间的空间距离的函数(geosphere::distm)。
此外,我根据伪代码源代码编写了dbscan代码:https://cse.buffalo.edu/~jing/cse601/fa13/materials/clustering_density.pdf我的结果与我从fpc包中获得的结果相同。有没有人注意到他们为什么不同。我已经检查了这两个函数,但没有找到任何东西。
发布于 2019-03-23 11:36:51
geosphere::distm
的文档说明它返回的不是dist
对象,而是矩阵。dbscan::dbscan
假设您有一个数据矩阵,而不是距离。首先使用as.dist
将矩阵转换为dist
对象。THis应该可以解决这个问题。
https://stackoverflow.com/questions/55308935
复制相似问题