sklearn聚类之OPTICS算法

article/2025/9/30 15:38:55

文章目录

    • 简介
    • sklearn实现
    • cluster_optics_dbscan

简介

OPTICS算法,全称是Ordering points to identify the clustering structure,是一种基于密度的聚类算法,是DBSCAN算法的一种改进。

众所周知,DBSCAN算法将数据点分为三类:

  1. 核心点:若样本 x i x_i xi ε \varepsilon ε邻域内至少包含了 M M M个点,则为核心点
  2. 边界点:若样本 x i x_i xi ε \varepsilon ε邻域内包含的点数小于 M M M,但在其他核心点的 ε \varepsilon ε邻域内,则为边界点
  3. 噪声:既非核心点也非边界点则为噪声

这里面有两个关键参数,即 ε \varepsilon ε邻域内点的个数 M M M,二者作为判定条件,用以区分核心点、边界点以及噪声。这两个参数至关重要,甚至可以直接影响聚类结果。换言之,DBSCAN受经验影响,不同的参数会导致不同的聚类结果。

OPTICS的改进思路是,降低算法对 ε \varepsilon ε值的依赖,从而引入了核心距离和可达距离的概念的概念,即对于样本 x x x,如果给定M,则使得 x x x成为核心点的最小邻域半径为 x x x的核心距离。如果 x x x是核心点,若距离 x x x最近的核心点为 y y y,则可达距离为 y y y的核心距离与 x , y x,y x,y实际距离的最大值。

OPTICS的优越之处在于,可以为每个聚类簇设置不同的核心距离与可达距离,更能在点密度的意义上,为样本提供更加个性化的聚类结果。

sklearn实现

若将OPTICS算法的聚类结果进行绘制,能更加直观地理解可达距离的作用。在sklearn中提供了OPTICS类,测试如下

from sklearn.cluster import OPTICS
import matplotlib.pyplot as plt
import numpy as npnp.random.seed(0)   # 设置随机数种子
cens = [[-5, -2], [4, -1], [1, -2], [-2, 3], [3, -2],[5, 6]]
scales =[0.8, 0.1, 0.2, 0.3, 1.6, 2]
X = np.vstack([c+s*np.random.randn(250,2) for c,s in zip(cens, scales)])clust = OPTICS(min_samples=50, xi=0.05, min_cluster_size=0.05)# 开始聚类
clust.fit(X)space = np.arange(len(X))
reachability = clust.reachability_[clust.ordering_]
labels = clust.labels_[clust.ordering_]

下面对聚类结果进行可视化演示


colors = ["g.", "r.", "b.", "y.", "c."]
# 绘制可达距离
for ind, color in enumerate(colors):Xk = space[labels == ind]Rk = reachability[labels == ind]plt.plot(Xk, Rk, color, alpha=0.3)# 此为噪声
plt.plot(space[labels == -1], reachability[labels == -1], "k.", alpha=0.3)
plt.plot(np.full_like(space, 2.0, dtype=float), "k-", alpha=0.5)
plt.plot(np.full_like(space, 0.5, dtype=float), "k-.", alpha=0.5)plt.tight_layout()
plt.show()

在这里插入图片描述

在上图中,横坐标为点的序号,纵坐标为可达距离,不同颜色代表OPTICS聚类得到的不同的距离。可以看出不同颜色截止时对应的 y y y值是不同的,说明在OPTICS聚类的过程中,对不同的聚类簇生成了不同的参数。

上图在0.5和2.0处画了两条线,如果以这两条线所在位置为 ε \varepsilon ε进行DBSCN聚类,则意味着产生不同的聚类结果。

cluster_optics_dbscan

sklearn中提供了cluster_optics_dbscan函数,可以指定统一的可达距离,并进行聚类,调用如下

from sklearn.cluster import cluster_optics_dbscan# 可达距离为0.5或者2时的DBSCN聚类
labels = [cluster_optics_dbscan(reachability=clust.reachability_,core_distances=clust.core_distances_,ordering=clust.ordering_,eps=0.5,
) for eps in [0.5, 2]]

然后可以对比一下这三种不同聚类方案的结果

import matplotlib.gridspec as gridspecfig  = plt.figure()
ax = fig.subplots(1, 3)labels = [clust.labels_] + labels
infos = ["Automatic Clustering\nOPTICS","Clustering at 0.5 epsilon cut\nDBSCAN","Clustering at 2 epsilon cut\nDBSCAN"
]for i in range(3):for k, c in enumerate(colors):Xk = X[labels[i] == k]ax[i].plot(Xk[:, 0], Xk[:, 1], c, alpha=0.3)noise = X[labels[i] == -1].TindNoise = labels[i] == -1ax[i].plot(noise[0], noise[1], "k+", alpha=0.1)ax[i].set_title(infos[i])

绘图结果如下

在这里插入图片描述


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

相关文章

聚类算法——OPTICS

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

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

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

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

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

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

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

Hyperlynx学习心得

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

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

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

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

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

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

1. 前面介绍的是微带线的串扰仿真,其实带状线的串扰与微带线的串扰有比较大的不同。主要是在拓扑结构中传输线TL2和TL5为带状线,分布在第三层,微带线与带状线通过过孔连接。带状线的仿真拓扑如图所示: 叠层信息如图所示&#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内存布局布线的信号完整性仿真分析。层叠结构设置,关键信号的仿真分析,有助于我们了解基于 Hyperlynx 对 DDR3 进行信号完整性仿真的整个流程。 首先我们从实际出发…

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

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

HyperLynx(五)反射仿真

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

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

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

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

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

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

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

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

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

DDR3 HYPERLYNX SI仿真

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

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

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

HyperLynx(六)参数扫描仿真

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

HyperLynx(四)差分传输线模型

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