网上很多关于OPTICS算法的资料,学习了很多博客之后总感觉不太合自己口味,因此整理了一篇博文供总结和复习,如能有幸帮助到其他人便是荣幸之至,如有错误,不吝指出。阅读此文需要了解“聚类”,“基于密度聚类”和DBSCAN算法的前置知识。


1 基于密度的聚类算法:DBSCAN与OPTICS

基于密度聚类的思想源于大名鼎鼎的DBSCAN算法,DBSCAN之所以可以成为基于密度算法的“父类”和基础,是因为提出的概念和扩展簇的方式奠定了这类聚类算法的核心思想,其他适应于不同数据或更自适应的基于密度的聚类算法是在这个核心思想上的改进与扩展。网上关于DBSCAN聚类的步骤讲解十分详细,作为基于密度聚类算法的开山之作,其操作十分简单,策略也十分便于理解,因此,DBSCAN聚类的策略在此不再赘述。

DBSCAN算法的关键参数有两个,即(邻域半径) 和Minpts(成为核心点的邻居数量阈值)。DBSCAN的核心思想一言以蔽之:首先,提取出所有范围内超过Minpts个邻居的点,称为核(心)点;然后,从任一核点出发将其邻居聚为一簇,从邻居中的任一核点出发继续扩展该簇,直到簇内点无法向外扩展,便形成了一个簇;最后,重新选择簇外没被访问过的核点形成另一个新簇,重复上一步和这一步操作,直到数据集中所有核点都被访问过(分配到簇)。

上述过程中很容易看出,(1)参数 和Minpts是作用全局的,即天然地假设全局的核点及簇(核点及其邻居构成簇)都具有相同密度阈值(Minpts/这也是为什么被称为”基于密度的聚类算法“的原因);(2)扩展过程是具有随意性的,从任一核心邻居出发扩展,不会从最稠密的地方开始扩展;(3) 参数 和Minpts是直接作用于形成簇的,因此簇的识别结果严重依赖于参数 和Minpts。DBSCAN识别不了下面这种情况,给定Minpts时,  太大时,识别结果为C1、C2、C3;   太小时,识别结果为C1、C2,原本的C1与C2会认为是噪声。

为了解决上述问题,“子类”的OPTICS算法应运而生。为了了解OPTICS算法的作用机制,首先梳理一下OPTICS算法的扩展概念与步骤。

2 OPTICS算法基本概念

核点 半径范围内超过Minpts个邻居的点,这里和DBSCAN核点概念相同,核点 范围内的其他点称为核点的邻居点。

直接可达:核点直接可达至邻居点。

密度可达:a直接可达至b,b直接可达至c...d直接可达至f,称为a密度可达至f,可以称a密度可达至c……

核心距离:核点p0与其第Minpts近的邻居点的距离cd(p0),核心距离定义依赖于核点定义,非核点没有核心距离。易知,cd(p0) 

可达距离:核点p0与其邻居点p1的真实距离(一般为欧氏距离)d(p0,p1)与核心距离cd(p0)中较大的称为p1到p0的可达距离rd(p1,p0)。易知,核心距离内(前第Minpts近的)邻居点到核点可达距离为固定值cd(p0),核心距离外邻居点到核点可达距离为真实距离d(p0,p1)。图示:

3 OPTICS算法步骤

输入(input)

  • DS={p0,p1,p2,...,pn}:数据集,共n个待聚类样本,pi为第i个样本;
  • :邻域半径,同DBSCAN概念,相当于划定了样本的“缓冲区域”;
  • Minpts:邻居数阈值,同DBSCAN概念,相当于指定了缓冲区内最小的邻居“数量”。

输出(output)

  • R:结果队列,具体形式为{样本点ID,可达距离}。

流程(process)

0. 定义

R={};            //预设结果队列为空
S={};            //预设处理队列为空
R_rs=[];         //结果队列样本对应的可达距离;
S_rs=[];         //处理队列样本对应的可达距离;
V=[0,0,...,0];   //预设访问序列全为0,n维行向量

1.计算结果队列

while 存在核点未被访问随机抽取点pi (i∈ind)if pi是核点 & vi==0                // pi是未访问过的核点vi=1                           //记录为被访问过S=[S, pi, SN(pi|v==0)]         // 将pi及其未访问的直接可达点(邻居点)加入处理队列S计算SN(pi|v==0)到pi的可达距离更新S_rswhile S不为空select rs(pj) = min(S_rs)   //选择可达距离最小的点pj作为下一次扩展的“核”vj=1                       //记录为被访问过S→pj                       //在处理队列中取出pjR=[R, pj]                  //将pj输出到结果队列S_rs→rs(pj)                //删除pj对应的该条可达距离R_list=[R_list, rs(pj)]    //输出pj到之前核点的可达距离,即当前S中最小的可达距离if pj是核点S=[S, SN(pj|v==0)]         // 将pj的未访问直接可达点(邻居点)加入处理队列S计算SN(pi|v==0)到pj的可达距离更新S_rs                //如果某点p已存在于S且rs(p,pj)<rs(p,pi),则更新为rs(p,pj)endendelsevi=1 end
end

2. 绘制可达距离曲线图

横轴为输出顺序,纵轴为可达距离。可以观察指定时的聚类情况,每一个山谷都是一个簇;同时最重要的是,可以观察指定 ( ≤ )时聚类效果。

如下图,在指定Minpts不变情况下:邻域半径为 时,数据集DS聚为3类; 邻域半径为  ,数据集DS聚为5类。最终根据结果队列的输出样本ID确定聚类结果。

4 OPTICS剖析

1. 为什么引入可达距离?其作用是?

从上述OPTICS算法流程中可以看出,相对于DBSCAN算法,OPTICS在“通过pj扩展簇”的步骤中不同之处在于优先扩展最近的邻居。一般而言,在面积一定的情况下,簇越稠密(密度越大),其样本间距离越小,在OPTICS中表现为可达距离越小。因此,引入可达距离并选择最小的邻居进行聚类,是为了首先聚选定点周围最稠密的地方,实现了对指定   不敏感的“由密到疏”的簇认知。

2.  如何理解OPTICS算法中邻域半径  的作用?

OPTICS中邻域半径  相当于设定了一个宽松的约束,可以认为是“最稀疏的簇间密度下限为Minpts/”,在此基础上,通过可达距离的认知实现更加稠密的簇的优先扩展。

聚类算法——OPTICS相关推荐

  1. 聚类算法OPTICS的理解及实现

    前言 前面给大家介绍到了聚类算法中比较经典的 DBSCAN 算法,对于数据量小而且相对比较密集.密度相似的数据集来说,是比较合适的.那么接下来给大家介绍它的改进版 OPTICS (Ordering p ...

  2. 密度聚类:OPTICS算法详解

    很多人不理解OPTICS算法绘出的图该怎么理解.为什么波谷就算一类,有个波峰又算另一类了,本篇在第三部分的第2.3节详细讲这个是什么判别分类的. 本篇会添加一些个人思考过程,可能有不严谨的地方,希望在 ...

  3. 密度聚类:OPTICS算法简单易懂版

    前几天写了一篇详解版,感觉可能太详细了阅读量不高,所以修改精简成这篇. 很多人不理解OPTICS算法绘出的图该怎么理解.为什么波谷就算一类,有个波峰又算另一类了,本篇在第三部分的第2.3节详细讲这个是 ...

  4. 关于聚类算法Kmeans/K-mediods/层次聚类/OPTICS较为详细的介绍

    K-means算法 将一群物理对象或者抽象对象的划分成相似的对象类的过程.其中类簇是数据对象的集合,在类簇中所有的对象都彼此相似,而类簇与类簇之间的对象是彼此相异. 聚类除了可以用于数据分割(data ...

  5. sklearn聚类之OPTICS算法

    文章目录 简介 sklearn实现 cluster_optics_dbscan 简介 OPTICS算法,全称是Ordering points to identify the clustering st ...

  6. optics算法matlab实现,OPTICS聚类算法的matlab实现

    优质解答 OPTICS聚类算法代码,从http://www.pudn.com/downloads238/sourcecode/math/detail1113278.html 该处下载. % ----- ...

  7. 【聚类算法】sklearn聚类方法详解

    转自:https://blog.csdn.net/ustbbsy/article/details/80960652 感谢博主 1 KMeans 1.1 算法描述 随机选择k个中心 遍历所有样本,把样本 ...

  8. 聚类算法(3):DBSCAN密度聚类

    目录 1. 基本概念 2. 算法描述 3. 算法实例 4. 算法优缺点 DBSCAN(Density-Based Spatial Clustering of Application with Nois ...

  9. 数据挖掘中聚类算法概述

    1 聚类方法概述 聚类方法是将物理或抽象对象的集合组成为由类似的对象组成的多个类的过程被成为聚类.由聚类所组成的簇是一组数据对象的集合,这些对象与同一簇中的对象彼此类似,与其他簇中的对象相异.在许多应 ...

最新文章

  1. 【经典算法】快速排序
  2. C++的iostream标准库介绍+使用详解(转)
  3. eclipse下载,安装,JDk环境配置教程
  4. 学习计划Current(2019.4.23)
  5. 开源项目的网址[不定时更新]
  6. 流行歌曲演唱的风格与技巧
  7. Win10 AMD平台无法开启SVM虚拟化
  8. 小程序源码:王者荣耀吃鸡气泡等等头像框DIY在线生成N种风格-多玩法安装简单
  9. 负反馈放大电路(附Multisim)
  10. 修改iphone模拟器hosts
  11. 猪齿鱼开源四周年庆典,邀您共享精彩瞬间
  12. [BTS] Unable to create the transform
  13. Oracle AutoVue 文件查看器Server服务器版安装及要求
  14. suspense源码分析
  15. 文件查重FindDupFile
  16. 做门户网站 个人站长的新好出路
  17. 地图导航APP开发功能
  18. 高防CDN是如何防护网站,防止CC攻击的?
  19. 怎样训练左右手协调_怎样练习左右手协调能力?!
  20. SDNU 1268.超超爱链表

热门文章

  1. oracle trace跟踪,oracle数据库跟踪工具 — oracle-tech
  2. Einstein's Riddle 爱因斯坦出的智力题?
  3. 计算机考研邮件模板!复试/调剂联系导师邮件怎么写?
  4. Microsoft Visual C++ 运行库
  5. html + css 基础总结
  6. rufus-scheduler 定时任务示例
  7. c语言字符串输入输出函数总结
  8. 鸿蒙投智慧屏交互,鸿蒙初体验:荣耀智慧屏跨系统交互构建新生态
  9. iis/apache + php5 + mysql5_Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.6安装配置方法
  10. 增效降本开源节流,2022年技术趋势前瞻(异步编程/容器技术)