算法笔记:OPTICS 聚类

news2024/11/17 23:47:43

1 基本介绍

  • OPTICS(Ordering points to identify the clustering structure)是一基于密度的聚类算法
    • OPTICS算法是DBSCAN的改进版本
      • 在DBCSAN算法中需要输入两个参数: ϵ 和 MinPts ,选择不同的参数会导致最终聚类的结果千差万别,因此DBCSAN对于输入参数过于敏感
      •  机器学习笔记:DBSCAN_dbscan参数选取-CSDN博客
    • OPTICS算法的提出就是为了帮助DBSCAN算法选择合适的参数,降低输入参数的敏感度
      • OPTICS主要针对输入参数ϵ过敏感做的改进
      • OPTICS和DBSCNA的输入参数一样( ϵ 和 MinPts  ),虽然OPTICS算法中也需要两个输入参数,但该算法对 ϵ 输入不敏感(一般将 ϵ 固定为无穷大)【不太清楚为什么不直接不输入ε呢?】
      • 同时该算法中并不显式的生成数据聚类,只是对数据集合中的对象进行排序,得到一个有序的对象列表
        • 通过该有序列表,可以得到一个决策图
        • 通过决策图可以不同 ϵ 参数的数据集中检测簇集,
      • 即:先通过固定的 MinPts  和无穷大的 ϵ 得到有序列表,然后得到决策图,通过决策图可以知道当 ϵ 取特定值时(比如 ϵ=3 )数据的聚类情况。

1.1 和DBSCAN相似的概念

  • ε、minPts、核心点、边缘点、噪点、密度直达(直接密度可达)、密度可达、密度相连 这些概念可见“机器学习笔记:DBSCAN_dbscan参数选取-CSDN博客

 1.2 OPTICS新的定义

1.2.1 核心距离

换句话说,如果x不是核心点,那么cd(x)就没有意义

1.2.2 可达距离

  • 也是,如果x不是核心点,那么rd(y,x)没有意义
  • 如果y在x的ε领域内,那么rd(y,x)=cd(x);如果在x的ε领域外,那么就是d(y,x)

1.3 算法思想

假设数据集为X=\{x_1,x_2,\cdots,x_m\},OPTICS算法的目标是输出一个有序排列,以及每个元素的两个属性值:核心距离,可达距离。

1.3.1 OPTICS算法的数据结构

1.4 算法流程

  • 输入:数据集X=\{x_1,x_2,\cdots,x_m\},领域参数ε(一般等于∞),MinPts
  1. 创建两个队列,有序队列O和结果队列R
    • 有序队列用来存储核心对象及其该核心对象的密度直达对象,并按可达距离升序排列
      • 理解为待处理的数据
    • 结果队列用来存储样本点的输出次序
      • 已经处理完的数据
  2. 如果D中所有点都处理完毕或者不存在核心点,则算法结束。否则:
    1. 选择一个未处理(即不在结果队列R中)且为核心对象的样本点 p
    2. 将 p 放入结果队列R中,并从X中删除 p
    3. 找到 X 中 p 的所有密度直达样本点 x,计算 x 到 p 的可达距离
      1. 如果 x 不在有序队列O 中,则将 x 以及可达距离放入 O 中
      2. 若 x 在O中,则如果 x 新的可达距离更小,则更新 x 的可达距离
    4. 最后对O中数据按可达距离从小到大重新排序。
  3. 如果有序队列O为空,则回到步骤2,否则:
    1. 取出O 中第一个样本点 y(即可达距离最小的样本点),放入 R 中
    2. 从 D 和 O 中删除 y
    3. 如果 y 不是核心对象,则重复步骤 3(即找 O 中剩余数据可达距离最小的样本点)
    4. 如果 y 是核心对象,则
      1. 找到 y 在 D 中的所有密度直达样本点
      2. 计算到 y 的可达距离
      3. 所有 y 的密度直达样本点更新到 O 中
      4. 对O中数据按可达距离从小到大重新排序。
  4. 重复步骤2、3,直到算法结束。
  5. 最终可以得到一个有序的输出结果,以及相应的可达距离。

1.5 举例

样本数据集为:D = {[1, 2], [2, 5],  [8, 7], [3, 6],  [8, 8], [7, 3], [4,5]}

假设eps = inf,min_samples=2,则数据集D在OPTICS算法上的执行步骤如下:

  • 计算所有的核心对象和核心距离
    • 因为 eps 为无穷大,则显然每个样本点都是核心对象
    • 因为 min_samples=2,则每个核心对象的核心距离就是离自己最近样本点到自己的距离(样本点自身也是邻域元素之一)
    • 索引0123456
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距离3.161.411.01.411.03.611.41
  • 随机在 D 中选择一个核心对象
    • 假设选择 0 号元素,将 0 号元素放入 R 中,并从 D 中删除
    • 因为 eps = inf,则其他所有样本点都是 0 号元素的密度直达对象
    • 计算其他所有元素到 0 号元素的可达距离(计算所有元素到 0 号元素的欧氏距离)
    • 按可达距离排序,添加到序列 O 中
    • 此时D{1,2,3,4,5,6},R{0},O{1,6,3,5,2,4}
    • 索引0123456核心对象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距离3.161.411.01.411.03.611.41
      第一次可达距离--3.168.604.479.216.084.240
  • 此时 O 中可达距离最小的元素是 1 号元素
    • 取出 1 号元素放入 R ,并从 D 和 O 中删除
    • 因为 1 号元素是核心对象,找到 1 号元素在 D 中的所有密度直达对象(剩余的所有样本点),并计算可达距离
    • 同时更新 O
    • 此时 D{2,3,4,5,6} R{0,1} O{3,6,5,2,4}
    • 索引0123456核心对象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距离3.161.411.01.411.03.611.41
      第二次可达距离----6.321.416.705.382.01
  • 此时 O 中可达距离最小的元素是 3 号元素
    • 取出 3 号元素放入 R ,并从 D 和 O 中删除
    • 因为 3 号元素是核心对象,找到 3 号元素在 D 中的所有密度直达对象(剩余的所有样本点),并计算可达距离
    • 同时更新 O
    • 此时D{2,4,5,6} R{0,1,3} O{6,5,2,4}
    • 索引0123456核心对象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距离3.161.411.01.411.03.611.41
      第三次可达距离----5.09--5.395.01.413
  • 此时 O 中可达距离最小的元素是 6 号元素
    • 取出 6 号元素放入 R ,并从 D 和 O 中删除
    • 因为 6 号元素是核心对象,找到 6 号元素在 D 中的所有密度直达对象(剩余的所有样本点),并计算可达距离,同时更新 O
    • 此时D{2,4,5},R{0,1,3,6},O(5,2,4}
    • 索引0123456核心对象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距离3.161.411.01.411.03.611.41
      第四次可达距离----4.47--5.03.61--6
  • 此时 O 中可达距离最小的元素是 5 号元素
    • 取出 5 号元素放入 R ,并从 D 和 O 中删除
    • 因为 5 号元素是核心对象,找到 5 号元素在 D 中的所有密度直达对象(剩余的所有样本点),并计算可达距离,同时更新 O。
    • 注意本次计算的4号元素到5号元素的可达距离是5.10,大于5.0,因此不更新4号元素的可达距离
    • 此时D{2,4}R{0,1,3,6,5} O(2,4)
    • 索引0123456核心对象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距离3.161.411.01.411.03.611.41
      第五次可达距离----4.12--

      5.0

      (5.10)

      ----5
  • 此时 O 中可达距离最小的元素是 2 号元素
    • 取出 2 号元素放入 R ,并从 D 和 O 中删除
    • 因为 2 号元素是核心对象,找到 2 号元素在 D 中的所有密度直达对象,并计算可达距离,同时更新 O
    • 索引0123456核心对象
      元素(1, 2)(2, 5)(8, 7)(3, 6)(8, 8)(7, 3)(4, 5)
      核心距离3.161.411.01.411.03.611.41
      第六次可达距离--------1.0----2

所以最后的R:(0,1,3,6,5,2,4) ,对应的可达距离为:{∞,3.16,1.41,1.41,3.61,4.12,1.0}

按照最终的输出顺序绘制可达距离图

  • 可以发现,可达距离呈现两个波谷,也即表现为两个簇,波谷越深,表示簇越紧密
  • 只需要在两个波谷之间取一个合适的 eps 分隔值(图中蓝色的直线),使用 DBSCAN 算法就会聚类为两个簇。
  • 即第一个簇的元素为:0、1、3、6、5;第二个簇的元素为:2、4。

1.4 和DBSCAN的异同

  • OPTICS算法与DBSCAN算法有许多相似之处,可以被视为DBSCAN的一种泛化,它将eps要求从单一值放宽到值范围
  • DBSCAN和OPTICS之间的关键区别在于,OPTICS算法构建了一个可达性图,为每个样本分配了一个可达性距离和在集群排序属性中的位置
    • 这两个属性在模型拟合时被赋值,并用于确定集群成员资格

1.5 可达性距离

  • OPTICS生成的可达性距离允许在单个数据集中提取可变密度的集群
    • 结合可达性距离和数据集排序产生了一个可达性图,其中点密度在Y轴上表示,点的排序使得附近的点相邻
    • 平行于x轴“切割”可达性图产生了类似DBSCAN的结果:
      • 所有在“切割”线以上的点被分类为噪声
      • 每当从左到右阅读时出现间断时,就标志着一个新的集群
  • OPTICS的默认集群提取方法是查看图中的陡峭斜坡以找到集群,可以使用xi参数定义什么算作陡峭斜坡

1.6 计算复杂度

  • 空间索引树用于避免计算完整的距离矩阵,并允许在大量样本集上有效地使用内存
  • 对于大型数据集,可以通过HDBSCAN获得类似(但不完全相同)的结果。
    • HDBSCAN实现是多线程的,并且比OPTICS具有更好的算法运行时间复杂性,但以较差的内存扩展为代价

2 sklearn.cluster.OPTICS

class sklearn.cluster.OPTICS(
    *, 
    min_samples=5, 
    max_eps=inf, 
    metric='minkowski', 
    p=2, 
    metric_params=None, 
    cluster_method='xi', 
    eps=None, 
    xi=0.05, 
    predecessor_correction=True, 
    min_cluster_size=None, 
    algorithm='auto', 
    leaf_size=30, 
    memory=None, 
    n_jobs=None)

2.1 主要参数

min_samples

int > 1 或介于0和1之间的浮点数,默认为5

点被视为核心点时,邻域中的样本数量

如果是浮点数,表示样本数量的一部分

max_eps

两个样本被视为彼此邻域的最大距离。

np.inf的默认值将识别所有规模的聚类;

降低max_eps将导致更短的运行时间

metric

str或可调用,默认为'minkowski'

用于距离计算的度量。可以使用

来自scikit-learn:['cityblock', 'cosine', 'euclidean', 'l1', 'l2', 'manhattan']

来自scipy.spatial.distance:['braycurtis', 'canberra', 'chebyshev', 'correlation', 'dice', 'hamming', 'jaccard', 'kulsinski', 'mahalanobis', 'minkowski', 'rogerstanimoto', 'russellrao', 'seuclidean', 'sokalmichener', 'sokalsneath', 'sqeuclidean', 'yule']

p闵可夫斯基度量的参数
xi

float在0和1之间,默认为0.05

确定可达性图中构成聚类边界的最小陡度。

例如,可达性图中的向上点被定义为一个点与其后继的比率最多为1-xi。

仅在cluster_method='xi'时使用

min_cluster_size

int > 1 或介于0和1之间的浮点数,默认为None

OPTICS聚类中的最小样本数量,表示为绝对数量或样本数量的一部分(至少为2)。如果为None,则使用min_samples的值。

仅在cluster_method='xi'时使用。

algorithm

{'auto', 'ball_tree', 'kd_tree', 'brute'},默认为'auto' 用于计算最近邻居的算法:

'ball_tree'将使用BallTree。

'kd_tree'将使用KDTree。

'brute'将使用蛮力搜索。

'auto'(默认)将尝试根据传递给fit方法的值决定最合适的算法。

leaf_size传递给BallTree或KDTree的叶子大小。这会影响构建和查询的速度,以及存储树所需的内存。最佳值取决于问题的性质。
cluster_method

str,默认为'xi'

使用计算的可达性和排序提取聚类的方法。可能的值是“xi”和“dbscan”

2.2. 举例

from sklearn.cluster import OPTICS
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0],
              [10, 2], [10, 4], [10, 0]])

op=OPTICS(min_samples=2).fit(X)

op.labels_
#array([0, 0, 0, 1, 1, 1])

op.ordering_
#array([0, 1, 2, 3, 4, 5])
#按聚类顺序排列的样本索引列表

op.reachability_
#array([inf,  2.,  2.,  9.,  2.,  2.])
#按对象顺序索引的每个样本的可达距离

op.core_distances_
#array([inf,  2.,  2.,  9.,  2.,  2.])
#每个样本成为核心点的核心距离
#永远不会成为核心的点的距离为无穷大。

参考内容:机器学习笔记(十一)聚类算法OPTICS原理和实践_optics聚类_大白兔黑又黑的博客-CSDN博客

(4)聚类算法之OPTICS算法 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1250237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式篇---第六篇

系列文章目录 文章目录 系列文章目录前言一、说说什么是漏桶算法二、说说什么是令牌桶算法三、数据库如何处理海量数据?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码…

可观测性建设实践之 - 日志分析的权衡取舍

指标、日志、链路是服务可观测性的三大支柱,在服务稳定性保障中,通常指标侧重于发现故障和问题,日志和链路分析侧重于定位和分析问题,其中日志实际上是串联这三大维度的一个良好桥梁。 但日志分析往往面临成本和效果之间的权衡问…

Spring Boot Actuator 2.2.5 基本使用

1. pom文件 &#xff0c;添加 Actuator 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2.application.properties 文件中添加以下配置 …

优秀软件设计特征与原则

1.摘要 一款软件产品好不好用, 除了拥有丰富的功能和人性化的界面设计之外, 还有其深厚的底层基础, 而设计模式和算法是构建这个底层基础的基石。好的设计模式能够让产品开发快速迭代且稳定可靠, 迅速抢占市场先机&#xff1b;而好的算法能够让产品具有核心价值, 例如字节跳动…

2、用命令行编译Qt程序生成可执行文件exe

一、创建源文件 1、新建一个文件夹&#xff0c;并创建一个txt文件 2、重命名为main.cpp 3、在main.cpp中添加如下代码 #include <QApplication> #include <QDialog> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); QDi…

深入浅出 Linux 中的 ARM IOMMU SMMU II

SMMU 驱动中的系统 I/O 设备探测 要使系统 I/O 设备的 DMA 内存访问能通过 IOMMU&#xff0c;需要将系统 I/O 设备和 IOMMU 设备绑定起来&#xff0c;也就是执行 SMMU 驱动中的系统 I/O 设备探测。总线发现系统 I/O 设备并和对应的驱动程序绑定&#xff0c;与 IOMMU 设备驱动程…

设备管理系统-设备管理软件

一、为什么要使用设备管理系统 1.企业扩张快&#xff0c;设备配置多&#xff0c;管理混乱。 2.设备数量多&#xff0c;存放地点多&#xff0c;查找麻烦。 3.同类设备单独管理, 困难。 4.设备较多时相关信息统计容易出错&#xff0c;错误后修改困难。 二、凡尔码设备管理软件的…

EEG脑电信号处理合集(1):功率谱中常见artifacts

通常EEG脑电信号采集完成以后&#xff0c;我们可以绘制出功率谱&#xff0c;一个正常的功率谱如下图所示&#xff1a; 在10H在处有个明显的突起&#xff0c;在后方通道中&#xff0c;这是我们所期望看到的。每个通道功率谱曲线都有一个负斜率&#xff0c;这是因为较高的频率通…

使用 HTML、CSS 和 JavaScript 创建图像滑块

使用 HTML、CSS 和 JavaScript 创建轮播图 在本文中&#xff0c;我们将讨论如何使用 HTML、CSS 和 JavaScript 构建轮播图。我们将演示两种不同的创建滑块的方法&#xff0c;一种是基于opacity的滑块&#xff0c;另一种是基于transform的。 创建 HTML 我们首先从 HTML 代码开…

NB-IoT BC260Y Open CPU平台篇②AEP物联网平台天翼物联CWing

NB-IoT BC260Y Open CPU平台篇②AEP物联网平台天翼物联CWing 1、注册账号2、创建属于自己项目的产品3、协议解析:4、添加设备5、设备模拟测试:6、设备调试:最近做了几个项目,都是将终端产品连接到天翼物联Cwing平台和Onenet平台,个人感觉这2个平台功能还是挺全的比较好用。…

Linux 常见命令篇

history 获取执行的指令记录 语法格式: history [参数] 常用参数&#xff1a; -a 写入命令记录 -c 清空命令记录 -d 删除指定序号的命令记录 -n 读取命令记录 -r 读取命令记录到缓冲区 -s 将指定的命令添加到缓冲区 -w 将缓冲区信息写入到历史文件 history#获取最近的三条…

Jquery ajax 进行网络请求,同步阻塞引起的UI线程阻塞 (loading图片不显示 )

jax重新获取数据刷新页面功能&#xff0c;因为ajax属于耗时操作&#xff0c;想在获取数据且加载页面时显示加载遮罩层&#xff0c;结果发现了ajax的好多坑。 ajax 执行http网络请示时时&#xff0c;让遮罩层显示&#xff0c;ajax加载完毕后遮罩层消失。 因为我想让loadChart()…

机器学习第13天:模型性能评估指标

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 交叉验证 保留交叉验证 k-折交叉验证 留一交叉验证 混淆矩阵 精度与召回率 介绍 精度 召回率 区别 使用代码 偏差与方差 介绍 区…

【阿里云】图像识别 智能分类识别 项目开发(一)

语音模块和阿里云图像识别结合 环境准备 代码实现 编译运行 写个shell脚本用于杀死运行的进程 语音模块和阿里云图像识别结合 使用语音模块和摄像头在香橙派上做垃圾智能分类识别 语音控制摄像下载上传阿里云解析功能点实现 环境准备 将语音模块接在UART5的位置 在orange…

AMEYA360:村田首款1608M尺寸/100V静电容量1µF的MLCC实现商品化

株式会社村田制作所成功开发了用于基站、服务器和数据中心48V线路的多层陶瓷电容器“GRM188D72A105KE01”并已量产。该产品在1608M(1.60.8mm)尺寸、100V的额定电压下可实现1μF的超大静电容量(村田调查数据&#xff0c;截至2023年11月20日)。目前可向村田申请免费样品。 随着5G…

【PyQt】(自定义类)阴影遮罩-升级版

这是之前发的代码(自定义类)阴影遮罩的升级版。 升级就升级在&#xff0c;优化了对非矩形控件的遮盖效果&#xff0c;例如圆角按钮&#xff0c;以及默认方法不满足时可以传入其他的遮盖方法。 自定义阴影遮罩Mask&#xff1a; class Mask(QWidget):__excludeNone__colorNonecl…

UVA437 巴比伦塔 The Tower of Babylon

UVA437 巴比伦塔 The Tower of Babylon 题面翻译 题目描述 你可能已经听说过巴比伦塔的传说。现在这个传说的许多细节已经被遗忘。所以本着本场比赛的教育性质&#xff0c;我们现在会告诉你整个传说&#xff1a; 巴比伦人有 n n n 种长方形方块&#xff0c;每种有无限个&a…

加载minio中存储的静态文件html,不显示样式与js

问题描述:点击链接获取的就是纯静态文件,但是通过浏览器可以看到明明加载了css文件与js文件 原因:仔细看你会发现加载css文件显示的contentType:text/html文件,原来是minio上传文件时将所有文件的contentType设置成了text/html 要在上传时指定文件,根据文章的类型指定的Conten…

Unity 讯飞 之 讯飞星火大模型的简单封装和使用(补充讯飞大模型识图功能)

Unity 讯飞 之 讯飞星火大模型的简单封装和使用&#xff08;补充讯飞大模型识图功能&#xff09; 目录 Unity 讯飞 之 讯飞星火大模型的简单封装和使用&#xff08;补充讯飞大模型识图功能&#xff09; 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、案例简单…

【Element】el-switch开关 点击弹窗确认框时状态先改变----点击弹窗取消框失效

一、背景 需求&#xff1a;在列表中添加定期出账的开关按钮&#xff0c;点击开关时&#xff0c;原来的状态不改变&#xff0c;弹出弹窗&#xff1b;点击弹窗取消按钮&#xff1a;状态不改变&#xff0c;点击弹窗确定按钮&#xff1a;状态改变&#xff0c;并调取列表数据刷新页…