DBSCAN在C#或vb.net中编码,用于聚类分析

DBSCAN在C#或vb.net中编码,用于聚类分析,c#,algorithm,gps,cluster-analysis,dbscan,C#,Algorithm,Gps,Cluster Analysis,Dbscan,我需要您的支持,为vb.net或C#.net中的库或代码提供建议,以应用DBSCAN生成基于Denisty的数据集群。我有一个GPS数据,我想用DBSCAN算法找到停留点。但是,我对算法的技术部分不太了解 不确定这就是您要寻找的,因为该算法非常容易解释。你想用C#解释算法还是翻译算法(或好的库) 你也可以看一看将军 算法 假设您选择了epsilon,开始一个集群的元素数是4 您需要定义距离函数、DBSCAN函数和扩展群集函数: 从 DBSCAN(D、eps、MinPts) C=0 对于数据集D中

我需要您的支持,为vb.net或C#.net中的库或代码提供建议,以应用DBSCAN生成基于Denisty的数据集群。我有一个GPS数据,我想用DBSCAN算法找到停留点。但是,我对算法的技术部分不太了解

不确定这就是您要寻找的,因为该算法非常容易解释。你想用C#解释算法还是翻译算法(或好的库)

你也可以看一看将军

算法 假设您选择了epsilon,开始一个集群的元素数是4

您需要定义距离函数、DBSCAN函数和扩展群集函数:

DBSCAN(D、eps、MinPts)
C=0
对于数据集D中的每个未访问点P
将P标记为已访问
N=GetNeights(P,eps)
如果sizeof(N)=MinPts
N=N与N'相连
如果P'还不是任何集群的成员
将P'添加到集群C
您有一个点列表:

首先:随机选择一个点:

如果点数为4,则以ε(ε是圆的半径)进行测试。如果是,启动群集(绿色),否则标记为噪声(红色):(每个未访问点的功能DBSCAN) 箭头显示您访问的所有点

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

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

这两个红点实际上在一个簇中


一旦你完成了所有的点,你就停止了

<代码> Objys,扩展了<代码> dBase< /Cord>,它消除了有时难以选择的ε参数(但是对于你来说,实际上可能相当容易,因为你有GEO数据——只要设置为1公里或任何你认为合理的)。
这是一个相当不错且功能强大的扩展
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