【问题标题】:OPTICS Clustering algorithm. How to get the best epsilon光学聚类算法。如何获得最好的 epsilon
【发布时间】:2012-06-08 17:36:40
【问题描述】:

我正在实施一个需要对地理点进行聚类的项目。 OPTICS 算法似乎是一个非常好的解决方案。它只需要两个参数作为输入(MinPts 和 Epsilon),它们分别是将它们视为一个簇所需的最小点数,以及用于比较两个点是否在同一个簇中的距离值。

我的问题是,由于点的种类繁多,我无法设置固定的 epsilon。 请看下面的图片。

相同的点结构但不同的比例会导致非常不同的结果。假设设置 MinPts=2 和 epsilon = 1Km。 在左边,该算法将创建 2 个集群(红色和蓝色),但在右边它将创建一个包含所有点(红色)的单个集群,但我想在右边也获得 2 个集群。

所以我的问题是:有没有什么方法可以动态计算 epsilon 值来得到这个结果?

编辑 2012 年 6 月 5 日下午 3:15: 我以为我使用的是 javaml 库中的 OPTICS 算法实现,但它似乎实际上是一个 DBSCAN 算法实现。 所以现在的问题是:有人知道基于 Java 的 OPTICS 算法实现吗?

非常感谢你,原谅我的英语不好。

马可

【问题讨论】:

  • 簇(几乎)是线性可分的吗?
  • 线性可分簇是什么意思?
  • 线性可分意味着您可以绘制一条“直线”分隔点。 “直线”可能不是笛卡尔/欧几里得直线,因为您可以变换轴,例如主成分。您的示例看起来是线性可分的。
  • 对不起,我好像听不懂……

标签: java algorithm cluster-analysis data-mining optics-algorithm


【解决方案1】:

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

引用 Wikipedia on OPTICS

参数 \varepsilon 严格来说是不必要的。它可以设置为最大值。当空间索引可用时,它在复杂性方面确实发挥了实际作用。

你看起来更像是 DBSCAN 而不是 OPTICS。在 OPTICS 中,您不需要选择 epsilon(作者应该将其称为 max-epsilon!),但是您的集群提取方法会解决这个问题。您是否使用了 OPTICS 论文中提出的 Xi 提取?

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

一旦你增加 minPts,你上面给出的例子应该可以正常工作!

回复:编辑:您甚至可以在 Wikipedia 文章中看到,ELKI 有一个适当的 OPTICS 实现并且它是用 Java 编写的。

【讨论】:

  • 什么是光学纸?其实我对聚类算法做了一些研究,发现了 OPTICS,但我没有读过关于它的论文
  • 关于 OPTICS 的 Wikipedia 文章中的第一篇论文:Mihael Ankerst、Markus M. Breunig、Hans-Peter Kriegel、Jörg Sander:OPTICS: Ordering Points To identify the Clustering Structure。在:ACM SIGMOD 国际数据管理会议。让我猜猜,你在 Weka 中使用了 OPTICS 的不完整实现?
  • 这似乎是 Weka 类的副本。它似乎实际上返回 DBSCAN 集群,而不是 OPTICS。
  • OPTICS 返回点的顺序。然后,此排序可用于提取 DBScan 集群、进行交互式探索或使用另一种名为 extractCluster() 的方法自动提取集群。也许他们刚刚实现了光学 + 用于提取 DBScan 集群的后处理步骤。如果是这种情况,那么 Optics 并不是不完整的(因为它只是应该返回一个点排序)。缺少一些替代的后处理步骤。
  • 层次结构的提取文章的一部分。否则,它不是层次聚类算法。如果您想要 DBSCAN 结果,请使用 DBSCAN。集群订单只是该目标的一个临时结果。 (本质上,这些图看起来与 Kruskal 1983 的冰柱图相同,只是上下颠倒并基于密度)
【解决方案2】:

您可以尝试按封闭矩形的总大小来缩放 epsilon。例如,您的左侧数据约为 4km x 6km(使用我的 Mark I 眼球测量),右侧约为 2km x 2km。因此,右侧的 epsilon 应该小 2.5 倍左右。

当然,这并不可靠。如果在您的右手数据中,在右侧 4 公里处和向下 2 公里处有一个额外的单点,这将使右侧的封闭矩形与左侧相同,并且您会得到相似(错误)的结果。

【讨论】:

  • 我已经想过这样的解决方案,但正如你所说,它不能正常工作(出于同样的原因你解释:))
  • 我想知道您是否可以使用最近邻类型算法来感受“典型”点之间的间距,然后使用它来计算 epsilon 的估计值。
  • 在左边的地块上,找到每个点的最近邻。平均约为 1 公里。在您的右侧地块上,典型的最近邻居更像是 0.2 公里。使用它通过一些神奇的公式 TBD 来缩放 epsilon。
  • 我认为这种方法的问题可能是“噪声点”的存在。如果在 30 公里的距离上只有几个点,那么平均值将是错误的。
  • @MarcoGalassi:OPTICS 专门设计用于优雅地处理噪声;这就是 MinPts 参数控制的内容。
【解决方案3】:

您可以尝试最小生成树,然后删除最长的边。剩下的生成树和它们的中心是 OPTICS 的最佳中心,您可以计算它周围的点数。

【讨论】:

  • 实际上 OPTICS 计算的东西接近最小生成树。计算另一个最小生成树来选择 OPTICS 的 停止阈值 没有多大意义。您通常可以只使用无穷大。
【解决方案4】:

在您上面的解释中,造成不确定性的是规模的变化。当你的规模变大时,你的 epsilon 应该相应地改变。因为它们处于两个非常不同的比例,所以您呈现的两个图像不是同一组点。如果不更改参数,它们不会对您的 OPTICS 算法做出相同的响应。

简而言之,不。没有办法动态计算 epsilon 来得到这个结果。像这样的聚类已经是 NP-Hard,而这些聚类算法(optics、k-means、veroni)只能逼近最优解。

【讨论】:

  • 上面的例子只是为了让你理解问题。这些点的放置方式相同,因为我复制并粘贴了它们,但总的来说,我说的是不同的点。
  • 其实 OPTICS 是 O(n log n) 支持索引并且不需要 epsilon。他使用的错误实现(weka/java-ml)实际上在O(n^2) 实现中执行 DBSCAN,因为它没有索引。据我所知,NP也不难。 k-means 是,但是当你有邻居列表时,DBSCAN 的密度连接模型是O(n);计算邻居是最昂贵的部分。
  • -1 表示此回复中的错误信息量,对不起。
  • @Anony-Mousse 首先非常感谢您的回答。所以,我显然在使用 DBSCAN。无论如何,问题是一样的,因为 DBSCAN 需要 Epsilon..
  • DBSCAN 作者建议使用 k 距离图来找到合适的 epsilon 值,顺便说一句。如果您需要不同的 epsilon 值,完整的答案是:使用 OPTICS!
猜你喜欢
  • 2023-03-12
  • 2019-03-02
  • 2010-10-25
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 2014-12-06
  • 2011-02-06
  • 2016-08-30
相关资源
最近更新 更多