我需要您的支持来建议 vb.net 或 C#.net 中的库或代码,这些库或代码应用 DBSCAN 来制作基于 Denisty 的数据集群。我有 GPS 数据,我想使用 DBSCAN 算法找到停留点。但是,我不太了解算法的技术部分。
问问题
6396 次
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 是圆的半径)。如果是,则启动一个集群(绿色),否则标记为噪声(红色):(每个未访问点的函数 DBSCAN)箭头显示所有点你去过
其次:展开集群:一旦找到集群,将所有点标记为绿色并检查该集群中的更多点
注意:如果在集群中,以前的噪声点可以更改为绿色
2个红点实际上是在一个集群中......
一旦你经历了所有你停止的点
于 2011-07-08T08:42:07.083 回答
1
OPTICS
,它的扩展DBSCAN
消除了有时难以选择的 epsilon 参数(但这实际上对您来说可能相当容易,因为您有地理数据 - 只需将其设置为 1 公里或您认为合理的任何值)。
这是一个相当不错和强大的扩展DBSCAN
,但不幸的是也有点难以实现。
于 2012-02-25T14:16:22.710 回答