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

sau*_*sau 5 r cluster-analysis dbscan

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

在我的案例中DBSCAN的优点:

  1. 我不必预定义簇的数量
  2. 我可以计算距离矩阵(使用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")
    
    Run Code Online (Sandbox Code Playgroud)

现在,当我看到集群时,它们没有意义.有些星团的点数相差超过1公里.我想要密集的群集,但不是那么大.

考虑到不同的值MinPts和eps,并且我还使用k最近邻距离图来获得epsfor MinPts= 25 的最佳值

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

这真的是一个很大的问题,特别是"如何在不过多影响其信息的情况下减少集群的大小",但我会将其写下来,如下所示:

  1. 如何删除群集中的边界点?我知道哪个群集使用哪个点dens$cluster,但我怎么知道特定点是核心还是边界?
  2. 群集0总是噪音吗?
  3. 我的印象是群集的大小可以与之相媲美eps.但事实并非如此,因为密度可达集群被组合在一起.
  4. 是否有任何其他聚类方法具有优势dbscan 但可以给我更有意义的聚类?

OPTICS 是另一种选择,但它会解决我的问题吗?

Note:有意义的我想说更接近的点应该在一个集群中.但是相距1km或更远的点不应该在同一个簇中.

Ano*_*sse 6

DBSCAN没有声称半径是最大簇大小.

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

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

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

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

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

如果要对簇直径进行硬限制,请使用完全链接层次聚类.