我正在实现一个需要对地理位置进行聚类的项目。 OPTICS算法似乎是一个非常好的解决方案。它仅需要2个参数作为输入(MinPts和Epsilon),分别是将它们视为一个簇所需的最少点数,并且可以将用于比较两个点是否在其中的距离值放在同一簇中。
我的问题是,由于要点的多样性,我无法设置固定的epsilon。
只需看下面的图片。
java - OPTICS聚类算法。如何获得最佳的ε-LMLPHP

相同的点结构但规模不同会导致非常不同。假设设置MinPts = 2且epsilon = 1Km。
在左侧,该算法将创建2个聚类(红色和蓝色),但是在右侧,它将创建一个包含所有点(红色)的单个聚类,但是即使在右侧,​​我也希望获得2个聚类。
所以我的问题是:是否有任何一种方法可以动态计算epsilon值以获得该结果?
编辑2012年6月5日下午3:15:
我以为我正在使用javaml库中的OPTICS算法实现,但似乎它实际上是DBSCAN算法实现。
所以现在的问题是:有人知道OPTICS算法的基于Java的实现吗?
非常感谢您,请原谅我的英语不好。
马可

最佳答案

使用索引结构时,OPTICS中的epsilon值仅用于限制运行时复杂性。如果没有用于加速的索引,则可以将其设置为 infinity

在OPTICS上引用维基百科



您似乎拥有的东西看起来更像DBSCAN,而不是OPTICS。在OPTICS中,您不需要选择epsilon(作者将其称为max-epsilon!),但是您的簇提取方法将解决这一问题。您是否正在使用OPTICS论文中提出的Xi提取?

minPts更重要。您应该尝试使用至少5或10的值,而不是2。使用2,实际上是在执行单链接群集!

一旦增加minPts,上面给出的示例就可以正常工作!

Re:编辑:正如您在Wikipedia文章中甚至可以看到的那样,ELKI具有适当的OPTICS实现,并且使用Java。

关于java - OPTICS聚类算法。如何获得最佳的ε,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10884822/

10-12 23:55