5

我需要您的支持来建议 vb.net 或 C#.net 中的库或代码,这些库或代码应用 DBSCAN 来制作基于 Denisty 的数据集群。我有 GPS 数据,我想使用 DBSCAN 算法找到停留点。但是,我不太了解算法的技术部分。

4

2 回答 2

17

不确定这就是您要查找的内容,因为该算法在wikipedia上得到了很好的解释。你想在 C# 中解释算法或翻译(或好的库)吗?

你也可以看看一般的聚类算法

算法

假设您选择了 epsilon,并且启动集群的元素数为 4。

您需要定义一个距离函数、一个 DBSCAN 函数和一个扩展簇函数:

来自维基百科:

DBSCAN(D, eps, MinPts)
   C = 0
   for each unvisited point P in dataset D
      mark P as visited
      N = getNeighbors (P, eps)
      if sizeof(N) < MinPts
         mark P as NOISE
      else
         C = next cluster
         expandCluster(P, N, C, eps, MinPts)

expandCluster(P, N, C, eps, MinPts)
   add P to cluster C
   for each point P' in N 
      if P' is not visited
         mark P' as visited
         N' = getNeighbors(P', eps)
         if sizeof(N') >= MinPts
            N = N joined with N'
      if P' is not yet member of any cluster
         add P' to cluster C

你有一个点列表:

第一:随机选择一个点:

如果点数为 4,则在 epsilon 中测试(Epsilon 是圆的半径)。如果是,则启动一个集群(绿色),否则标记为噪声(红色):(每个未访问点的函数 DBS​​CAN)箭头显示所有点你去过

在此处输入图像描述

其次:展开集群:一旦找到集群,将所有点标记为绿色并检查该集群中的更多点

在此处输入图像描述

注意:如果在集群中,以前的噪声点可以更改为绿色

在此处输入图像描述

2个红点实际上是在一个集群中......

在此处输入图像描述

一旦你经历了所有你停止的点

于 2011-07-08T08:42:07.083 回答
1

OPTICS,它的扩展DBSCAN消除了有时难以选择的 epsilon 参数(但这实际上对您来说可能相当容易,因为您有地理数据 - 只需将其设置为 1 公里或您认为合理的任何值)。

这是一个相当不错和强大的扩展DBSCAN,但不幸的是也有点难以实现。

于 2012-02-25T14:16:22.710 回答