我正在尝试实现DBSCAN,但我无法理解其背后的想法。如果它一个一个地遍历整个数据并为近邻创建一个新集群,那么我总是会得到很多集群。假设它检查第一个点的近邻,找到足够的邻居(> MinPts
),为他们创建一个集群,移动到下一个点,检查邻居(也可能找到已经在集群中的邻居)并为他们创建一个新集群. 等等。所以一些点将被添加到超过 1 个集群中......因此会创建很多集群。
有人可以解释一下这个算法是如何工作的吗?我在网上没有找到太多关于它的信息。
我正在尝试实现DBSCAN,但我无法理解其背后的想法。如果它一个一个地遍历整个数据并为近邻创建一个新集群,那么我总是会得到很多集群。假设它检查第一个点的近邻,找到足够的邻居(> MinPts
),为他们创建一个集群,移动到下一个点,检查邻居(也可能找到已经在集群中的邻居)并为他们创建一个新集群. 等等。所以一些点将被添加到超过 1 个集群中......因此会创建很多集群。
有人可以解释一下这个算法是如何工作的吗?我在网上没有找到太多关于它的信息。
不,已经创建了一个集群,然后您查看集群中的点,如果它们中的任何一个具有足够的密度来拥有自己的集群,那么该“原始集群”中的所有点都将添加到原始集群中。以这种方式,它继续聚集,直到密度降低,使得添加的点缺乏足够的相邻点来继续该过程。完成此操作后,该集群中的所有点都处于市场“关闭”状态,并且该过程重新开始,在剩余的“开放”节点中寻找新的集群。
网上有很多关于 DBSCAN 的材料......即使你查看维基百科,你也可以找到它的详细算法:
http://en.wikipedia.org/wiki/DBSCAN#Algorithm
您使用哪种语言对其进行编码?如果您熟悉 matlab、java 或 r,网上有很多实现,也许可以帮助您...
一个很好的起点是原始论文......