OPTICS

来自testwiki
imported>Hrs814582024年1月10日 (三) 19:21的版本 top
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

Template:Expand English Template:机器学习导航栏 OPTICSTemplate:Lang-en)是由米哈伊爾·安克斯特(Mihael Ankerst)、馬庫斯·M·布呂尼希(Markus M. Breunig)、漢斯-彼得·克里戈爾和約爾格·桑德(Jörg Sander)提出的基于密度的聚类分析算法[1]OPTICS并不依赖全局变量来确定聚类,而是将空间上最接近的点相邻排列,以得到数据集合中的对象的线性排序。[2]排序后生成的序列存储了与相邻点之间的距离,并最终生成了一个 dendrogram 。OPTICS算法的思路与DBSCAN类似,但是解决了DBSCAN的一个主要弱点,即如何在密度变化的数据中取得有效的聚类。同时 OPTICS也避免了多数聚类算法中对输入参数敏感的问题。

复杂度

类似于DBSCAN,OPTICS处理数据集中的每个点,在这个过程中进行ε-邻域查询。如果保证给定空间坐标时候,邻域查询可以以O(logn)的复杂度完成,可以得到总时间复杂度为O(nlogn)。OPTICS原始论文的作者表明OPTICS算法比DBSCAN算法慢常数1.6倍。由于值过大可能会使邻域查询的的时间复杂度降至线性,这个数值可能会显著变化。

实践中,选择ε>maxx,yd(x,y)(大于数据集中的最大距离)是可能的,但由于每此领域查询会在整个数据集中进行,时间复杂度会降至平方。即使没有可用的空间索引,也会产生额外的堆管理成本。 因此ε应当被仔细选择。

软件实现

Template:Link-en提供了OPTICS、OPTICS-OF、DeLi-Clu、HiSC、HiCO和DiSH的Java实现。

R语言中,dbscan包提供了OPTICS的C++实现。

Python中,PyClustering库和Scikit-learn库实现了OPTICS;hdbscan库提供了HDBSCAN*实现。

参考资料

Template:Reflist Template:Compsci-stub