我正在使用GPS数据(纬度,经度)。对于基于密度的集群,我在R中使用了DBSCAN。
就我而言,DBSCAN的优点:
公式),并将其用作dbscan中的输入
library(fossil)
dist<- earth.dist(df, dist=T) #df is dataset containing lat long values
library(fpc)
dens<-dbscan(dist,MinPts=25,eps=0.43,method="dist")
现在,当我查看群集时,它们没有意义。一些群集的点相距超过1公里。我想要密集的群集,但不要那么大。
照顾到
MinPts
和eps的不同值,并且我还使用k最近邻居距离图来获得eps
= 25的MinPts
的最佳值dbscan
所做的事情将遍历我的数据集中的每个点,如果点p在其MinPts
邻域中具有eps
,它将形成一个簇,但同时它也加入了密度可达的簇(我想这是一个问题。为我)。这确实是一个很大的问题,尤其是“如何在不过度影响群集信息的情况下减小群集的大小”,但是我将其记为以下几点:
哪个集群使用
dens$cluster
,但是我怎么知道重点是核心还是边界?
相当于
eps
。但这不是因为密度可以达到群集组合在一起。
dbscan
优势的聚类方法但是可以给我更多有意义的集群吗?
OPTICS
是另一种选择,但是它可以解决我的问题吗?Note:
有意义的是,我想说更近的点应该在一个簇中。但相距1公里或以上的点不应位于同一群集中。 最佳答案
DBSCAN并不声称半径是最大群集大小。
你看过这篇文章吗?它正在寻找形状任意的集群; eps
只是一个点的核心大小;大致用于密度估计的大小;核心点半径范围内的任何点都将成为群集的一部分。
这实际上使连接密集点的最大步长为。但是它们仍然可以形成任意形状或大小的密度连接点的链。
我不知道您的R实作中的丛集0。我已经尝试过R的实现,但是它比其他所有方法都慢。我不建议使用R,有很多更好的工具可用于聚类分析,例如ELKI。尝试使用您在ELKI上的设置,带有LatLngDistanceFunction和sort-tile-递归加载的R树索引来运行DBSCAN。与R相比,您会惊讶地发现它有多快。
OPTICS正在寻找相同的密度连接的类型的群集。您确定要寻找这种任意形状的群集吗?
恕我直言,您为目标使用了错误的方法(并且您并没有真正在解释要达到的目标)
如果您想对簇直径进行硬性限制,请使用完整链接分层聚类。