聚类算法——OPTICS

article/2025/9/30 16:42:12

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


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

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

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

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

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

2 OPTICS算法基本概念

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

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

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

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

可达距离:核点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个样本;
  • \epsilon邻域半径,同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. 绘制可达距离曲线图

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

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

4 OPTICS剖析

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

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

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

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


http://chatgpt.dhexx.cn/article/M9RMrfQW.shtml

相关文章

JS获取url参数(简单、实用)

// js获取url传参参数function GetQueryString(name) {var reg new RegExp("(^|&)" name "([^&]*)(&|$)");// Location 对象是 Window 对象的一个部分&#xff0c;可通过 window.location 属性来访问。var r window.location.search.substr(…

js获取url参数值的两种方式详解

有个url如下&#xff1a; http://passport.csdn.net/account/login?fromhttp%3a%2f%2fwrite.blog.csdn.net%2fpostedit 我们该如何获取from这个参数的值呢&#xff1f;在网上搜了下方法很简单&#xff0c;如下&#xff0c;第一种是通过正则&#xff0c;第二种通过切串放进数…

js获取url参数值的方法总结

js获取url参数值的方法总结 1、方式一&#xff1a;通过字符串截取的方式获取参数值&#xff1b;2、方式二&#xff1a;通过正则获取到参数值&#xff1b; 1、方式一&#xff1a;通过字符串截取的方式获取参数值&#xff1b; 1&#xff09;、函数一&#xff1a;获取URL中的参数名…

Hyperlynx学习心得

1、Altium Designer文件导入Hyperlynx问题 众所周知AD的文件各大友厂商的文件对它都不咋友好~&#xff0c;很多SI、PI文件都不支持&#xff0c;但AD可以输出Hyperlynx文件供其使用、但也会存在一些问题。我遇到问题就是 AD中使用填充的铜皮在Hyperlynx中不识别&#xff0c;直接…

HyperLynx(二十五)电源完整性之直流压降分析(二)

1.后仿真的直流压降 2.批量直流压降分析 3.如何改善电压下降较多的设计 1.后仿真的直流压降 (1)打开HperLynx软件。从目录中打开 C:\PI_Trng\lab2\exer2\ post_dc_drop.hyp&#xff0c;单击“Open”按钮&#xff0c;当打开板子时被问到是否用Man- hattan-style布线连接没有布…

HyperLynx(二十二)DDR(五)DDRx总线时序模型设计

由于DDRx总线对时序的要求非常严格&#xff0c;随着速率的提升&#xff0c;时序的要求会更高。要使用DDRx批处理仿真器&#xff0c;需要创建控制器和DRAM颗粒的时序模型&#xff0c;时序模型文件后缀为“*.V”。 HyperLynx 提供两种方式进行时序模型的创建和编辑: 一种是在语…

HyperLynx(八)带状线串扰的仿真

1. 前面介绍的是微带线的串扰仿真&#xff0c;其实带状线的串扰与微带线的串扰有比较大的不同。主要是在拓扑结构中传输线TL2和TL5为带状线&#xff0c;分布在第三层&#xff0c;微带线与带状线通过过孔连接。带状线的仿真拓扑如图所示&#xff1a; 叠层信息如图所示&#xff…

HyperLynx(二十八)板层噪声分析和SI/PI联合仿真实例

板层噪声分析和SI/PI联合仿真实例 1.前仿真噪声分析 2.后仿真噪声分析 3.设置和运行SI/PI联合仿真 4.执行信号过孔旁路分析 1.前仿真噪声分析 (1)从“开始”菜单中打开HyperLynx:“开始”→“所有程序”一“Mentor Graphics SDD”→“HyperLynx”→“HyperLynx Simulation S…

基于Hyperlynx VX.2.5 的DDR3仿真之一:Verifying That the Software Recognizes Your Design Correctly

这是一篇基于Mentor公司 Hyperlynx VX.2.5 仿真软件针对Xilinx ZYNQ 的ZC702 PCB上DDR3内存布局布线的信号完整性仿真分析。层叠结构设置&#xff0c;关键信号的仿真分析&#xff0c;有助于我们了解基于 Hyperlynx 对 DDR3 进行信号完整性仿真的整个流程。 首先我们从实际出发…

HyperLynx(三十一)高速串行总线仿真(三)

高速串行总线仿真&#xff08;三&#xff09; 1.从一个多层板工程中验证串行通道 2.在多层板中设置连接器模型 1.从一个多层板工程中验证串行通道 在本例练习中&#xff0c;将集中研究从芯片到插件形成的串行发射通道&#xff0c;并分析它的性能。 (1)打开 HyperLynx 软件&a…

HyperLynx(五)反射仿真

1.反射仿真 1.学过物理的工程师都知道&#xff0c;光在传输过程中不在介质的表面会发生反射和折射现象&#xff0c;如图所示。同样&#xff0c;对于信号而言&#xff0c;信号在传递的的过程中&#xff0c;遇到阻抗不连续的点(不同的介质或不同的物理结构时)&#xff0c;一部分…

HyperLynx(十八)DDR(一)DDR简介和DDR的数据仿真

1.DDR简介 2.DDR仿真概述 3.DDR数据仿真前的数据验证 4.DDR数据仿真具体步骤 1.DDR简介 DDR&#xff08;双倍速率同步动态随机存储器&#xff09;是一个内存名称&#xff0c;意思即双倍速率同步动态随机存储器&#xff0c;是内存的其中一种。 DDR 总线是由 SDRAM 发展而来的一…

HyperLynx(三十)高速串行总线仿真(二)

高速串行总线仿真&#xff08;二&#xff09; 仿真实例 1.探索多层板中的PCI-E串行通道 2.设置叠层以减小损耗 3.分析通道的不同配置对损耗的影响 4.检测驱动端规范 5.检查接收器规范 6.通过仿真得出整个通道的驱动约束限制 1.探索多层板中的PCI-E串行通道 在本节练习中&am…

HyperLynx(二十七)电源完整性之AC去耦仿真实例(二)

电源完整性之AC去耦仿真实例&#xff08;二&#xff09; 1.后仿真的去耦仿真 2.去耦电容在后仿真分析中的作用 3.使用QPL文件为去耦电容分配模型 4.如何设计好电源系统 1.后仿真的去耦仿真 (1)在“开始”菜单中打开HyperLynx:“开始”→“所有程序”→“Mentor Graphics SDD…

HyperLynx(十二)BoardSim和PCB板级仿真分析(三)

1.使用曼哈顿布线进行BoardSim仿真 2.快速分析整板的串扰强度 3.交互式串扰仿真 4.Gbit信号仿真 1.使用曼哈顿布线进行BoardSim仿真 前面讲述的分析&#xff0c;都是在已布线的PCB上进行的。实际上&#xff0c;对PCB进行信号完整性、串扰、EMC分析不一定要求在物理布线之后进行…

DDR3 HYPERLYNX SI仿真

HYPERLYNX仿真DDR是非常的方便&#xff0c;有固定的模板可以用&#xff0c;这里就大致的过程和大家分享下。 ①导入PCB的数据&#xff0c;设置叠层&#xff0c;设置下电源 ②设置完成打开DDR batch-mode wizard ③本次仿真的是DDR3L,800MT。 ④添加控制器和DDR ⑤添加模型 ⑥…

HyperLynx(十一)BoardSim和PCB板级仿真分析(二)

BoardSim和PCB板级仿真分析&#xff08;二&#xff09; 1.设置模型 2.提取原理图 3.查看信号网络的属性 4.快速添加端接 5.普通信号网络批量仿真设置 1.设置模型 在BoardSim 中对元器件赋模型的基本方法与在 LineSim中的一样&#xff0c;但其中增加了特殊的部分&#xff0c;…

HyperLynx(六)参数扫描仿真

HyperLynx可以很好地完成原理图和PCB的串扰仿真&#xff0c;也非常方便PCB设计过程中批量地仿真串扰。 **耦合长度&#xff1a;**不管是在同一层上&#xff0c;还是在空间上&#xff0c;其耦合长度都是传输线之间相互平行的耦合区域的长度。 **串扰饱和长度&#xff1a;**串扰…

HyperLynx(四)差分传输线模型

1.差分传输线 在高速电路 PCB 设计中&#xff0c;差分传输线是一类比较特殊和重要的传输线&#xff0c;差分传输线简称差分线。随着电路设计技术的提升&#xff0c;从最早期的伪差分信号设计&#xff0c;到现在的差分信号设计&#xff0c;差分信号越来越多地应用在高速电路设计…

HyperLynx(二十三)DDR(六)DDRx总线批量仿真

HyperLynx&#xff08;二十三&#xff09;DDR&#xff08;六&#xff09;DDRx总线批量仿真 1.DDR仿真流程2.仿真前参数设置3.批处理仿真前验证4.DDR2总线批处理仿真&#xff08;实例&#xff09;4.1 收集设计信息并为DDRx向导准备设计电路4.2 设置DDRx向导 5.仿真结果分析解读6…