我刚开始使用DBSCAN算法。
简要总结;它有两个参数:
epsilon
– 用于指定两个点之间的可接受“距离”,在此距离之下,它们可以被认为足够接近以形成簇。minPoints
– 用于指定在距离epsilon
内必须有多少点才能构成一个簇。如果点数不够,它会被标记为噪音。
我使用的是别人的DBSCAN算法,并且我有源代码,但我只是部分理解。我希望可以直接使用它,但随后我发现了一些意想不到的行为。
我为minPoints
指定了6的值,但在我的结果中,我得到一个只有2个点的簇。
通过调试,我认为我能看到发生了什么。看起来当点被检查时,它有16个距离低于epsilon
的邻居,所以它应该被认定为一个簇。后来,算法发现这16个邻居中有14个已经被分配到不同的簇中,所以这个簇最终只有2个点。
minPoints
应该被严格执行吗?
这是一个正常工作的DBSCAN算法应该有的表现,还是我需要在继续之前修复的一个错误?
回答:
对于通过Google找到这个问题的任何人,正确的答案是可以的。一个正确运行的DBSCAN实现是有可能创建一个成员数量少于minPoints的簇的。在另一个Stack Overflow问题中有更详细的解释: