OPTICS 聚类算法的 ELKI 实现只检测到一个聚类

Posted

技术标签:

【中文标题】OPTICS 聚类算法的 ELKI 实现只检测到一个聚类【英文标题】:ELKI implementation of OPTICS clustering algorithm detects only one cluster 【发布时间】:2012-12-11 11:39:00 【问题描述】:

我在 ELKI 环境中使用 OPTICS 实现时遇到问题。我在 DBSCAN 实现中使用了相同的数据,它就像一个魅力。可能我错过了一些带有参数的东西,但我无法弄清楚,一切似乎都是正确的。

数据是一个简单的 300х2 矩阵,由 3 个簇组成,每个簇有 100 个点。

DBSCAN 结果:

Clustering result of DBSCAN

MinPts = 10,Eps = 1

光学结果:

Clustering result of OPTICS

MinPts = 10

【问题讨论】:

我看论文比较准确,发现OPTICS算法本身输出的不是分类而是范围。因此,我们获得了有关密度簇结构的信息(以密度图的形式)并随后使用它。我推荐使用 ELKI 中的 OpticsXI 算法进行分类。 【参考方案1】:

@AnonyMousse 说得很对。我还不能投票或发表评论。

我们希望随着时间的推移,让一些学生将其他聚类提取方法作为小型学生项目贡献出来。它们对于我们的研究来说不是必不可少的,但对于想要了解 ELKI 入门的学生来说,它们是很好的任务。

ELKI 是一个快速发展的项目,它源于社区的贡献。我们很高兴看到您为它贡献一些代码。我们知道代码库上手并不容易——它相当大,而且实现的普遍性和对索引结构的支持使得上手有点困难。我们尝试添加Tutorials 以帮助您入门。一旦你习惯了它,你实际上会从架构中受益:你的算法获得索引和任意距离函数的好处,而如果你从头开始实现,你可能只支持欧几里德距离,而不支持索引加速。

看到你在OPTICS上苦苦挣扎,我会在新的一年尝试写一篇OPTICS教程。特别是,OPTICS 可以从使用适当的索引结构中受益匪浅。

【讨论】:

我强烈建议 ELKI UI 从 UI 的角度来看应该更加直观。目前,它几乎无法使用,需要根据参数和异常进行大量猜测,这些参数和异常用于不良地传达不良参数。 欢迎用户界面贡献。我真的讨厌做 UI。但是您需要了解它是一个试图提供所有可能的选择的工具;不仅是最佳选择。任何 UI必须能够适应不断的新算法,我们不能每次添加新算法或选项时都必须更新 UI 代码。最后ELKI 是一种研究工具,而不是最终用户应用程序,所以我们的重点不是漂亮的用户界面(尽管如此,欢迎贡献)。 您是否考虑过将包装器放入另一个包中,例如 Weka,它的 UI 更友好但算法效率较低?这肯定会比当前的 UI 提供更多的曝光率。我了解 ELKI 是一种研究工具,但 UI 存在问题会限制用于调查目的的算法的可用性。 我个人不需要,所以我自己不会这样做。事实上,我对当前的 UI 非常满意,它完美地满足了我的目的。是的,我当然想要一个更好的用户界面,但是谁来呢? 明白。我要求确定对与 Weka 有联系的兴趣或反对意见。我过去曾将算法移植到 Weka,并且可以添加一些包装器,就像我为几种聚类算法所做的那样。只是理解参数的问题,这是我在使用 MiniGUI 时经常遇到的问题的一部分。【参考方案2】:

您自己显然已经找到了解决方案,但长话短说:

ELKI 中的OPTICS 类只计算集群顺序/可达性图。

为了提取集群,您有不同的选择,其中之一(来自原始 OPTICS 出版物的那个)在 ELKI 中可用。

因此,为了在 ELKI 中提取集群,您需要使用OPTICSXi 算法,该算法将依次使用OPTICS 或基于索引的DeLiClu 来计算集群顺序。

在 ELKI 中将其分为两部分的原因可能是一方面您可以实现另一种逻辑来提取集群,另一方面实现不同的方法,例如 DeLiClu 来计算集群顺序。这与 ELKI 的模块化架构非常吻合。

IIRC 至少还有一种方法(显然在 ELKI 中还没有)通过寻找局部最大值来提取集群,然后水平扩展它们直到它们到达山谷的尽头。还有一个不同的使用情节的“拐点”。

【讨论】:

以上是关于OPTICS 聚类算法的 ELKI 实现只检测到一个聚类的主要内容,如果未能解决你的问题,请参考以下文章

optics聚类算法

密度聚类密度聚类过程OPTICS算法

OPTICS聚类算法详解

精品聚类算法 optics

密度聚类OPTICS算法

KMeans 在 ELKI 中的使用,综合示例