使用DBSCAN聚类GPS数据但是聚类没有意义(就大小而言)

时间:2013-12-31 11:40:03

标签: r cluster-analysis dbscan

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

DBSCAN在我的案例中的优势:

  1. 我没有预定义数量的群集
  2. 我可以计算距离矩阵(使用Haversine Distance 公式)并将其用作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")
    
  3. 现在,当我查看群集时,它们没有意义。有些星团的点数相差超过1公里。我想要密集的簇,但不是那么大。

    MinPts和eps的不同值得到了处理,我还使用k最近邻距离图来获得eps = 25的最佳值MinPts

    dbscan正在做的是我的数据集中的每个点,如果点p在MinPts邻域中有eps,它将构成一个群集但同时它也是加入密度可达的集群(我想这对我来说是个问题)。

    这确实是一个很大的问题,特别是“如何在不过多影响其信息的情况下减少群集的大小”,但我会将其记录为以下几点:

    1. 如何删除群集中的边界点?我知道哪些要点 哪个群集使用dens$cluster,但我怎么知道a 特别是核心还是边界?
    2. 群集0总是噪音吗?
    3. 我的印象是群集的大小 与eps相当。但事实并非如此,因为密度可达 集群组合在一起。
    4. 是否有其他群集方法具有dbscan的优势 但是能给我更有意义的集群吗?
    5. OPTICS是另一种选择,但它会解决我的问题吗?

      Note:有意义的我想说更接近的点应该在群集中。但是相距1公里或更远的点不应该在同一个星团中。

1 个答案:

答案 0 :(得分:6)

DBSCAN并未声称半径是最大簇大小。

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

这使得它基本上是连接密集点的最大步长。但它们仍然可能形成一系列密度连接点,具有任意形状或大小。

我不知道R实现中的集群0是什么。我已经尝试过R实现,但是 waaaay 比其他所有实现慢。我不建议使用R,有更好的集群分析工具,例如ELKI。尝试使用您在ELKI上的设置运行DBSCAN,使用LatLngDistanceFunction和sort-tile-recursive加载的R-tree索引。与R相比,你会惊讶地发现它有多快。

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

恕我直言,你的目标使用了错误的方法(你并没有真正解释你想要实现的目标)

如果您想要对群集直径进行硬限制,请使用完整链接层次聚类