聚类笔记:HDBSCAN

1 算法介绍

  • DBSCAN/OPTICS+层次聚类
  • 主要由以下几步组成
    • 空间变换
    • 构建最小生成树
    • 构建聚类层次结构(聚类树)
    • 压缩聚类树
    • 提取簇

2  空间变换

  • 互达距离来表示两个样本点之间的距离
    • ——>密集区域的样本距离不受影响
    • ——>稀疏区域的样本点与其他样本点的距离被放大
    • ——>增加了HDBSCAN聚类算法对散点的鲁棒性
  • 空间变换的效果取决于ε的选择
    • 当ε较大的时候,核心距离会变大
    • ——>互达距离变化
    • ——>更多样本点被分配到稀疏区域(更多点被视为散点)

2.1 核心距离

  • 同OPTICS(算法笔记:OPTICS 聚类-CSDN博客)的核心距离

2.2 互达距离

  • 比如下图,蓝点和绿点的互达距离,就是绿点的核心距离(绿线)
  • 红点和绿点的互达距离,就是他们两个点之间的距离(黄线)

3 建立最小生成树

使用Prim算法生成最小生成树

NTU课程:MAS714(4):贪心-CSDN博客

4 构建聚类层次结构

  • 给定最小生成树,下一步是将其转换为图分裂的层次结构
  • 这里用逆向思维完成这件事
    • 第一步:将树中的所有边按照距离递增排序
    • 第二步:然后依次选取每条边,将边的链接的两个子图进行合并。(类似于层次聚类的思路)
  • 以下得到的树又称为聚类树

此时如果和层次聚类一样,设置一条distance的阈值

  • 我们就可以将红线下面最近的节点作为聚类的一个类,而红线上面的聚起来的都是散点。

但是这样得到的聚类结果,会有很多有很少量节点的簇

——>我们需要压缩聚类树

5 压缩聚类树

通过压缩聚类树,我们可以得到一棵拥有少量节点的聚类树

5.1 具体步骤

  • 1,确定最小簇的大小(HDBSCAN的一个参数)
  • 2,当最小簇大小确定了后,我们就可以自上而下遍历聚类树,并在每个节点分裂时:看分裂产生的两个样本子集的样本数是否大于最小簇大小
    • 如果左右儿子中有一个子结点的样本数少于最小族大小,我们就直间将该节点删除,并且另一个子节点保留父节点的身份
    • 如果两个子结点中的样本数都小于最小族大小,那么就将其两个子节点都删除,即当前节点不再向下分裂
    • 如果两个子结点中的样本数都大于最小族大小,那么我们进行正常分裂,即保持原聚类树不变。
    • (删除的点都是HDBSCAN视为的噪点)

6 提取簇

  • 从压缩的聚类树种提取聚类的簇
    • 为压缩聚类树的每个节点打上一个类标签
  • 提取簇的一个原则是:某个节点属于某一个簇,那么他的子节点都属于这个簇
  • 经过聚类树的压缩操作,树中已经没有了散点(散点在压缩聚类树的过程中已经被删除)
    • 现在的任务只是将较近的节点合并到一簇中去,使得最后选择的簇能够有更好的稳定性

6.1 聚类树节点稳定性

  • 首先定义一个λ,表示距离的倒数\lambda=\frac{1}{distance}
  • 对于树中的某个节点(一个节点里有一堆样本点)定义两个量:\lambda_{birth},\lambda_{death}
    • \lambda_{birth}:分裂产生当前节点时,对应断开边长度的倒数(分类当前节点的父节点)
    • \lambda_{death}:当前节点被分裂成两个子结点时,对应断开边长度的倒数。
    • 分裂父节点时,断开边长度肯定比分裂当前点的时候长,所以倒数正好反过来
      • 也即:\lambda_{birth}<\lambda_{death}
  • 之后的我就没看懂了。。。可以参考【机器学习】密度聚类算法之HDBSCAN_hdbscan速度慢-CSDN博客 r

如果有会的同学,欢迎赐教~

7  sklearn实现

class sklearn.cluster.HDBSCAN(
    min_cluster_size=5, 
    min_samples=None, 
    cluster_selection_epsilon=0.0, 
    max_cluster_size=None, 
    metric='euclidean', 
    metric_params=None, 
    alpha=1.0, 
    algorithm='auto', 
    leaf_size=40, 
    n_jobs=None, 
    cluster_selection_method='eom', 
    allow_single_cluster=False, 
    store_centers=None, 
    copy=False)

7.1 主要参数

min_cluster_size一个群组中样本的最小数量,以便将该群组视为一个簇;小于此大小的群组将被视为噪声
min_samples一个点被视为核心点的邻域内的样本数量。这包括点本身。
cluster_selection_epsilon一个距离阈值。低于此值的簇将被合并
metric计算特征数组中实例之间距离时使用的度量。
algorithm

用于计算核心点距离的算法

{“auto”, “brute”, “kdtree”, “balltree”}

参考内容: 【机器学习】密度聚类算法之HDBSCAN_hdbscan速度慢-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity Android FireBase bugly报错查询

报错如下图&#xff0c;注意&#xff0c;标红的三处 使用的il2cpp和架构是arm64-v8a 那我们就可以根据这些去找对应的符号表&#xff0c;在unity安装目录下 Unity2020.3.33f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\arm64-v8a 找到l…

缓存组件状态,提升用户体验:探索 keep-alive 的神奇世界

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

晨控CK-FR03-EIP读卡器与欧姆龙NX/NJ系列EtherNet/IP通讯手册

晨控CK-FR03-EIP读卡器与欧姆龙NX/NJ系列EtherNet/IP通讯手册 CK-FR03-EIP是一款基于射频识别技术的高频RFID标签读卡器&#xff0c;读卡器工作频率为13.56MHZ&#xff0c;支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。 读卡器同时支持标准工业通讯…

Linux文件查看命令

1.cat加上文件名 &#xff08;因为所有文件内容都会打印到屏幕上&#xff0c;所以内容少时使用这个&#xff0c;总不能用cat来定义一本小说&#xff09; 3.往文件中写入数据——cat加上>(重定向符&#xff09;加上文件名&#xff0c;写完之后&#xff0c;按键 cat原本是把…

Mac OS 干货教学-超详细Wifi破解教学

Mac OS 干货教学&#x1f525;-超详细Wifi破解教学 尊重原创&#xff0c;编写不易 &#xff0c;帮忙点赞关注一下~转载小伙伴请注明出处&#xff01;谢谢 PS&#xff1a;学术交流&#xff0c;私自破解他人wifi可能要负担法律责任或让办公电脑被Hack黑客风险&#xff01;本次本…

python之pyqt专栏2-项目文件解析

项目结构 在上一篇文章python之pyqt专栏1-环境搭建&#xff0c;创建新的pyqt项目&#xff0c;下面我们来看一下这个项目下的文件。 从下面的文件结构图可以看到&#xff0c;该项目下有3个文件&#xff0c;untitled.ui,untitled.py 以及main.py。 QtDesigner可以UI界面的方式&am…

python 将当前时间转成CP56time2a BIN码

def cp56time2a_hex_str():# 获取当前时间now datetime.now()# 将当前时间格式化为CP56time2a格式s now.strftime("%Y%m%d%H%M%S")[2:]cp56time2a [s[i:i 2] for i in range(0, len(s), 2)]seconds cp56time2a[-1:][0]cp56time2a cp56time2a[:-1]seconds_hex …

openstack(2)

目录 块存储服务 安装并配置控制节点 安装并配置一个存储节点 验证操作 封装镜像 上传镜像 块存储服务 安装并配置控制节点 创建数据库 [rootcontroller ~]# mysql -u root -pshg12345 MariaDB [(none)]> CREATE DATABASE cinder; MariaDB [(none)]> GRANT ALL PR…

bat批处理文件

常用的bat批处理命令 1、遍历移动文件最好将文件编码保存为 ANSI编码 新的改变 1、遍历移动文件 把子目录里面的文件批量移动到当前目录 &#xff08;或根目录&#xff09; 项目中要批量导入附件&#xff0c;但是收集的子公司员工信息&#xff0c;都是每个人一个文件夹的&…

需求变更导致估算不精准 6大措施

需求变更可能导致估算不精准、项目成本增加、进度延迟等问题&#xff0c;如果不能准确地估算项目&#xff0c;往往会造成资源浪费和开发效率的降低&#xff0c;因此亟需解决因需求变更导致地估算不精准的问题。 一般来说&#xff0c;主要是从以下6个方面入手解决&#xff1a; 1…

python实现存款日利息计算器(窗口界面形式)

输入存款金额&#xff0c;7日年化收益率&#xff0c;输出每日利息 完整源码如下&#xff1a; import tkinter as tk from tkinter import messageboxdef calculate_interest():deposit float(entry_deposit.get())interest_rate float(entry_interest_rate.get())daily_int…

基于Zigbee的教室智能环境监控系统(论文+源码)

1.系统设计 此次研究的目的是设计一款基于Zigbee的教室智能环境监控系统&#xff0c;其系统框图如下图2.1。在此拟由CC2530单片机作为核心进行设计。同时结合多种传感器&#xff0c;如温度传感器&#xff0c;用来检测环境的温度。光照传感器&#xff0c;用来通过检测光照强度&…

告别传统Office,办公软件将如何选择

各家奶茶店的商战正如火如荼地进行着&#xff0c;各种办公软件之间的竞争亦是弥漫着无形的硝烟。WPS虽然凭借其操作便利、简单易上手的优势获得不少打工人的青睐&#xff0c;即使是在手机端&#xff0c;也可进行简单的数据处理。但是&#xff0c;正所谓“术业有专攻”&#xff…

前端入门(三)Vue生命周期、组件技术、事件总线、

文章目录 Vue生命周期Vue 组件化编程 - .vue文件非单文件组件组件的注意点组件嵌套Vue实例对象和VueComponent实例对象Js对象原型与原型链Vue与VueComponent的重要内置关系 应用单文件组件构建 Vue脚手架 - vue.cli项目文件结构refpropsmixin插件scoped样式 Vue生命周期 1、bef…

【STM32单片机】LED点阵花样显示设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用8*8LED点阵模块、按键模块等。 主要功能&#xff1a; 系统运行后&#xff0c;默认以静态模式显示&#xff0c;此时点阵左右循环切换图像。 当按下K…

C++之unordered_map/set的使用

前面我们已经学习了STL中底层为红黑树结构的一系列关联式容器——set/multiset 和 map/multimap(C98). unordered系列关联式容器 在C98中, STL提供了底层为红黑树结构的一系列关联式容器, 在查询时效率可达到log2N,即最差情况下需要比较红黑树的高度次, 当树中的节点非常多时,…

牛气霸屏-快抖云推独立版V1.6.7

介绍 快抖云推全插件独立版是最近很火的牛气霸屏系统独立版&#xff0c;牛气霸屏系统就是商家通过系统在线创建抖音或快手霸屏活动&#xff0c;并生成该活动的爆客二维码&#xff0c;用户通过扫二维码即可参加活动&#xff08;活动可以是领取卡劵&#xff0c;抽奖等&#xff0…

PyQt6简介

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计12条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

如何用SWIG封装c++接口给java使用?

SWIG是什么&#xff1f; SWIG(Simplified Wrapper and Interface Generator)是一个将C/C接口转换为其他语言接口的工具&#xff0c;从而可以讲C/C的库集成到其他语言的系统中。目前SWIG已经可以支持Python, Java, C#,Ruby&#xff0c;PHP,R语言等十多种语言。 官方网址&…

Excel使用VLOOKUP查询数据

VLOOKUP函数在百度百科中的解释是&#xff1a; 解释一下&#xff0c;函数需要4个参数&#xff1a; 参数1&#xff08;lookup_value&#xff09;&#xff1a;需要匹配的值参数2&#xff08;table_array&#xff09;&#xff1a;在哪个区域里进行匹配参数3&#xff08;col_index…
最新文章