我正在实施一个需要对地理点进行聚类的项目。OPTICS 算法似乎是一个非常好的解决方案。它只需要两个参数作为输入(MinPts 和 Epsilon),它们分别是将它们视为一个簇所需的最小点数,以及用于比较两个点是否在同一个簇中的距离值。
我的问题是,由于点的种类繁多,我无法设置固定的 epsilon。看看下面的图片。
相同的点结构但不同的规模会导致非常不同的结果。假设设置 MinPts=2 和 epsilon = 1Km。在左侧,该算法将创建 2 个集群(红色和蓝色),但在右侧,它将创建一个包含所有点(红色)的单个集群,但我想在右侧也获得 2 个集群。
所以我的问题是:有没有什么方法可以动态计算 epsilon 值来得到这个结果?
编辑 2012 年 6 月 5 日下午 3 点 15 分: 我以为我使用的是 javaml 库中的 OPTICS 算法实现,但它似乎实际上是一个 DBSCAN 算法实现。所以现在的问题是:有人知道基于 Java 的 OPTICS 算法实现吗?
非常感谢你,原谅我糟糕的英语。
马可