我正在使用GPS数据(纬度,经度)。对于基于密度的集群,我在R中使用了DBSCAN。

就我而言,DBSCAN的优点:

  • 我不必预先定义簇数
  • 我可以计算距离矩阵(使用Haversine距离
    公式),并将其用作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,但是我怎么知道
    重点是核心还是边界?
  • 群集0总是噪音吗?
  • 我的印象是群集的大小为
    相当于eps。但这不是因为密度可以达到
    群集组合在一起。
  • 是否还有其他具有dbscan优势的聚类方法
    但是可以给我更多有意义的集群吗?
  • OPTICS是另一种选择,但是它可以解决我的问题吗?
    Note:有意义的是,我想说更近的点应该在一个簇中。但相距1公里或以上的点不应位于同一群集中。

    最佳答案

    DBSCAN并不声称半径是最大群集大小。

    你看过这篇文章吗?它正在寻找形状任意的集群; eps只是一个点的核心大小;大致用于密度估计的大小;核心点半径范围内的任何点都将成为群集的一部分。

    这实际上使连接密集点的最大步长为。但是它们仍然可以形成任意形状或大小的密度连接点的链。

    我不知道您的R实作中的丛集0。我已经尝试过R的实现,但是它比其他所有方法都慢。我不建议使用R,有很多更好的工具可用于聚类分析,例如ELKI。尝试使用您在ELKI上的设置,带有LatLngDistanceFunction和sort-tile-递归加载的R树索引来运行DBSCAN。与R相比,您会惊讶地发现它有多快。

    OPTICS正在寻找相同的密度连接的类型的群集。您确定要寻找这种任意形状的群集吗?

    恕我直言,您为目标使用了错误的方法(并且您并没有真正在解释要达到的目标)

    如果您想对簇直径进行硬性限制,请使用完整链接分层聚类

    09-10 04:22
    查看更多