OPTICS

article/2025/9/30 15:06:12

    OPTICS 就是一种基于密度的聚类算法,可以认为是dbscn的改进,改进之处主要是在不用每次调节eps和minpts都需要重新整个训练。其本质还是dbscan,只是能够在给定eps和minpts后,可以训练一次就可以在minpts值定对的情况下,尝试不同的eps’(eps’需要小于eps)来得到不同的结果。只不过由于算法需要,每个点得归属不是按照次序归为核心点,而是归为最近(如果距离小于核心距离的话就还是会受先后的影响)的核心点。

    这种方法的思想就是当区域内点的密度大于某个阀值, 就把这些点归于一类,因此这种基于密度的聚类算法天生就有很强的寻找离群噪音点的能力。 一般来讲聚类算法最终得出的都是固定参数下的具体分类结果,而 OPTICS 则不然, OPTICS 最终得出的是一个在一定参数区间——最小领域半径(ε−neighborhood 下包含所有分类可能的点的序列,这个序列里的每个点都记录了它在此特定参数区间下的2个属性——核心距离 core distance)以及可达距离(reachability distance)。通过这个序列, 我们可以很方便的得出在参数 ε' 下(当 ε' ≤ ε−neighborhood 时)数据点的分类结果。

    综上所述,OPTICS具有2个很重要的特点:

        1.抗离群噪音干扰的能力(寻找离群噪音点的能力)

        2.对初始参数不敏感

    OPTICS 需要的参数有2个,第一个就是前面提到的最小邻域半径(ε−neighborhood), 这个参数的意义是对于每个点 P 而言,在半径为 ε 的范围内如果有其他点,那么这些点都算P的邻点, 也就是说和P是在最小领域半径为 ε 的情况下是属于同一类的。

    如上图所示,点123为点P ε 范围内的邻点,而点4则不是。所以点 P 3个邻点, 这样我们就会自然的想到 OPTICS 应该具有的第二个参数——最小邻点数(minimum number of points minpts——对于点 P 而言,至少需要有多少个邻点才能证明自己是一个核心点(core point), 也就是说自己是一个类别中最普通的一员,不是边界点,更不是一个离群的孤立点。 minpts 在这里也代表了密度聚类算法中的密度阀值,当 ε 范围内点的密度大于阀值 minpts 则说明 ε 范围内的点属于同一类别。

    前面提到过,OPTICS 输出的序列中,每个点都有核心距离和可达距离两个属性。在最小领域半径为 ε 最小邻点数为3的情况下(后面的例子中也默认为这样),如上图所示,点 P 具有4个邻点, 而到点1的距离是点 P 刚好满足至少有3个邻点的半径,所以取点 P 到点1的距离为点 P 的核心距离。 对于点4和点1而言,它们的可达距离就是其到点 P 的距离。而对于点2和点3而言, 由于它们到点 P 的距离小于点 P 的核心距离,因此,设置它们的可达距离等于点 P 的核心距离。 

也就是说对于每个点 P 而言,假设让其刚好满足最小邻点数的点为 P' ,则P的核心距离等于其到点 P' 的距离,其他情况为正无穷。

    对于核心点 P 的邻点 P1P2…Pn 而言,如果其到点 P 的距离大于点 P 的核心距离, 则其可达距离为该点到点 P 的距离,如果小于等于点 P 的核心距离,则其可达距离等于点 P 的核心距离。

    OPTICS的具体步骤是:

        1: procedure runOPTICS(X, ε, minpts)

        2: while point x X unprocessed and unchecked do

        3:    dis ← distance(x, X)

        4:    if x is corePoint then

        5:        mark x as processed

        6:        N ← getNeighbors(x, ε, dis)

        7:        setCoreDistance(x, N, ε, minpts)

        8:        O ← x; Q ← N

        9:        update(x, N, Q)

        10:       while Q ≠ empty do

        11:           y ← extractMinRD(Q)

        12:           mark y asprocessed

        13:           O ← y

        14:           dis ← distance(y, X)

        15:           if y is corePoint then

        16:               N' ← getNeighbors(y, ε, dis)

        17:               setCoreDistance(y, N', ε, minpts)

        18:               Q ← N'

        19:               update(y, N', Q)

    其中 X 是原始的点的数据集合,O 作为最后输出结果的点集的有序序列,Q 是一个无重复元素的队列, 保存了当前已找到但是还没处理过的属于同一类别的点的集合。算法首先遍历输入的点集 X ,找到一个核心点,如果找不到,则直接结束算法,如果找到一个点 x 为核心点, 则设置 x 的核心距离以及可达距离并将其加入输出序列 O,将其所有邻点加入队列 Q 之后从队列 Q 中找出可达距离最小的点 y,将其加入输出序列,如果 y 也是核心点, 则将 y 的所有邻点加入到并且更新队列 Q。重复以上步骤直到处理完所有的点。 其中的 update 函数的功能是更新队列 Q 中点的可达距离。

    具体步骤为:

        1: procedure update(x, N, Q)

        2: foreach unprocessed point x' N do

        3:    newD ← max(CD[x], distance(x, x'))

        4:    if RD[x'] = NULL then

        5:        RD[x'] ← newD

        6:    else if newD < RD[x'] then

        7:        RD[x’] ← newD

    在得到最后的有序序列O后,可以通过选取参数 ε' ≤ ε 来获得邻域半径为 ε' 时的分类结果,其步骤如下:

        1: procedure orderToClusters(O, ε')

        2: id ← 0

        3: for each point x O do

        4:    if RD[x] > ε' then

        5:        if CD[x] ≤ ε' then

        6:            id ← id +1

        7:            CID[x] ← id

        8:        else

        9:            CID[x] ← NOISE

        10:   else

        11:       CID[x] ← id

 

参考链接:https://www.hansight.com/blog-Parallel-OPTICS.html

                https://www.biaodianfu.com/optics.html

                https://www.cnblogs.com/pangblog/p/3271313.html


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

相关文章

聚类算法初探(六)OPTICS

第一章 引言 第二章 预备知识 第三章 直接聚类法 第四章 K-means 第五章 DBSCAN 第六章 OPTICS 第七章 聚类分析的效果评测 第八章 数据尺度化问题 作者: peghoty 出处: http://blog.csdn.net/itplus/article/details/10089323 欢迎转载/分享, 但请务必声明文章出处. 转…

OPTICS聚类(最清晰解释)

背景 想要理解该算法&#xff0c;你需要先了解&#xff1a; DBSCAN算法 OPTICS&#xff08;用于识别聚类结构的排序点&#xff09;算法与 DBSCAN 算法有许多相似之处&#xff0c;可视为 DBSCAN 的泛化&#xff0c;将 eps 要求从单个值放宽到一个范围 DBSCAN 和 OPTICS 之间的主…

机器学习笔记(十一)聚类算法OPTICS原理和实践

OPTICS聚类算法是基于密度的聚类算法&#xff0c;全称是Ordering points to identify the clustering structure。提到基于密度的聚类算法&#xff0c;应该很快会想到前面介绍的DBSCAN聚类算法&#xff0c;事实上&#xff0c;OPTICS也是为了优化DBSCAN而出现的。 一、原理 在…

sklearn聚类之OPTICS算法

文章目录 简介sklearn实现cluster_optics_dbscan 简介 OPTICS算法&#xff0c;全称是Ordering points to identify the clustering structure&#xff0c;是一种基于密度的聚类算法&#xff0c;是DBSCAN算法的一种改进。 众所周知&#xff0c;DBSCAN算法将数据点分为三类&…

聚类算法——OPTICS

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

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分析不一定要求在物理布线之后进行…