sklearn之OPTICS聚类

news2025/1/21 8:48:37

文章目录

      • 简介
    • 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 np

np.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 gridspec

fig  = 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].T
    indNoise = labels[i] == -1
    ax[i].plot(noise[0], noise[1], "k+", alpha=0.1)
    ax[i].set_title(infos[i])

在这里插入图片描述

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

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

相关文章

ResNet精读(2)

FLOPs :整个网络要计算多少个浮点运算 卷积层的浮点运算等价于 输入的高*输入的宽*通道数*输出通道数再乘以卷积核的高和宽再加上全连接的一层 我们发现训练的时候的精度是要比测试精度来的高的在一开始,这是因为训练的时候用了数据增强 使得训练误差…

2022年莱佛士大盘点 ,设计的种子遍地开花!

2022似乎过得尤其之快,反复的居家隔离和线上网课,似乎给2022蒙上了一层雾蒙蒙的灰色。但2022总还给我们留下了些东西,在莱佛士设计学院,我们共同见证了梦想的种子在设计的各个领域遍地开花。现在我们一起来看看2022年莱佛士学生们…

广义表——LISP的基石

线性表中存放的是同一类型的元素,而广义表是线性表的推广,即广义表中除包含类型相同的元素外,还可以包含具有其自身结构的元素。在人工智能领域使用十分广泛的 LISP语言中,广义表是一种基本数据类型,LISP 语言中的数据…

Vue3案例-todoMVC-pinia版 (可跟做练手)

列表展示功能 (1) 在main.js中引入pinia import { createApp } from vue import App from ./App.vue import { createPinia } from pinia import ./styles/base.css import ./styles/index.cssconst pinia createPinia() createApp(App).use(pinia).m…

Spring源码学习~11、Bean 的加载步骤详解(二)

Bean 的加载步骤详解(二) 一、循环依赖 1、什么是循环依赖 循环依赖就是循环引用,即两个或多个 bean 互相之间持有对方,如下图: 循环引用不是循环调用,循环调用是方法之间的环调用,循环调用是…

谷粒学院——Day18【权限管理Spring Security、配置中心Nacos、代码托管git】

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…

Linux搭建Gitlab保姆级教程

文章目录1、gitlab安装1.1、gitlab介绍1.1.1、概念1.1.2、gitlab与github的区别1.1.3、gitlab的优势1.1.4、gitlab主要服务构成1.1.5、gitlab的工作流程1.2、准备工作1.3、安装1.4、配置1.5、启动1.6、测试2、gitlab安装目录3、gitlab常用命令4、注册账号5、gitlab相关设置5.1、…

上半年要写的博客文章23

上半年要写的博客文章21 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个…

ArcGIS基础实验操作100例--实验76按格网统计点要素

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 高级编辑篇--实验76 按格网统计点要素 目录 一、实验背景 二、实验数据 三、实验步骤 (1&…

java EE 初阶 — CAS 的介绍

文章目录CAS1. 什么是 CAS2. CAS 是怎么实现的3. CAS 有哪些应用3.1 实现原子类3.2 实现自旋锁4. CAS 的 ABA 问题4.1 什么是 ABA 问题4.2 ABA 问题引来的 BUG4.3 解决方案5. 相关面试题CAS 1. 什么是 CAS CAS:全称 Compare and swap,字面意思&#xff…

设计模式——工厂方法模式

文章目录1. 工厂方法模式的定义2. 工厂方法模式的类图3. 工厂方法模式的作用4. 工厂方法模式的实现1. 工厂方法模式的定义 定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 2. 工厂方法模式的类图 3. 工厂方法模式…

[教程]一文搞懂STM32使用DHT11采集温湿度

1、DHT11简介 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高 的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测 温元件,并与一个高性能8…

GO语言基础-08-内建函数-make()、new()

文章目录1. make1.1 概述1.2 示例(make切片)1.3 示例(make map)1.4 示例(make 通道)2. new2.1 概念2.2 示例(new 切片)2.3 示例(new和make对比)2.4 示例&…

Java基础算法每日5道详解(2)

83. Remove Duplicates from Sorted List 从排序列表中删除重复项 Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well. Example 1: Input: head [1,1,2] Output: [1,2]Exa…

20230109测试ToyBrick的RK3588开发板运行Buildroot的V20220811版本

20230109测试ToyBrick的RK3588开发板运行Buildroot的V20220811版本 2023/1/9 14:25 开发板:Toybrick的TB-RK3588X开发板 SDK:RK3588_LINUX_20220811\rk3588-linux-20220811.tar.gz_06 H:\BaiduNetdiskDownload\RK3588_LINUX_20220811 rk3588-linux-2022…

【SQLyog错误号码2058解决办法】

当你遇到下图这个错误时,是由于SQLyog在8.0以上版本采用了新的加密方式。 解决办法: win R打开 , 输入cmd,打开命令行窗口, 然后连接你的SQLyog版本的服务器, mysql -uroot -P3306 -p注意:…

【Kotlin】数字类型 ( 安全转换函数 | 浮点型转整型 )

文章目录一、安全转换函数二、浮点型转整型一、安全转换函数 在 Kotlin 中 , 将 字符串 String 类型 转为 数字类型 , 如果 字符串 代表的数字类型 与 要换转的 数字类型 不匹配 , 就会出异常 ; 如 : 执行如下代码 , 就会报异常 ; 字符串内容是 0.5 , 显然是一个 Double 类…

Kotlin Flow响应式编程,StateFlow和SharedFlow

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新。 大家好,今天是Kotlin Flow响应式编程三部曲的最后一篇。 其实回想一下我写这个Kotlin Flow三部曲的初衷,主要还是因为…

基于瑞芯微平台cif接口dvp相机的视频接入(ov2640、rv1126为例)

基于瑞芯微平台cif接口dvp相机的视频接入(ov2640、rv1126为例)名词定义视频格式sensor与ispI2CXCLK行场同步信号DATA抓图名词定义 CIF,指RK芯片中的VIP模块,用以接收Sensor数据并保存到Memory中,仅转存数据&#xff0c…

Komo 综合资产收集和漏洞扫描工具

前言 因工作中的需要,开发了这款综合资产收集和漏洞扫描工具,方便在工作中各方面的收集资产和漏洞扫描,同时也可用于挖洞。 Komo已经在工作中辅助我挖到过一些漏洞,同时轻便了我资产收集的过程。 Komo is a comprehensive asset c…