聚类笔记: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.hqwc.cn/news/214963.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

Redis中文结果查看方式

背景 当使用redis时我们存储到缓存中可能会包含一些中文,例如下面命令 set test 中国 当执行查看时,发现客户端显示的并不是中文而是乱码,例如下面结果 get test \xe4\xb8\xad\xe5\x9b\xbd 现对【\xe4\xb8\xad\xe5\x9b\xbd】的查看有如下几个方式 方式一:通过客户端直…

虾皮知虾数据分析软件:优化您的电商经营

在当今竞争激烈的电商市场&#xff0c;了解市场动态、分析竞争对手和产品趋势是成功经营的关键。虾皮知虾数据分析软件是一款强大的工具&#xff0c;为电商卖家提供了全面的数据采集和分析功能。本文将介绍虾皮知虾数据分析软件的特点和功能&#xff0c;以及如何利用它来优化您…

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

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

HarmonyOS ArkTS 给应用添加通知和提醒(十二)

简介 随着生活节奏的加快&#xff0c;我们有时会忘记一些重要的事情或日子&#xff0c;所以提醒功能必不可少。应用可能需要在指定的时刻&#xff0c;向用户发送一些业务提醒通知。例如购物类应用&#xff0c;希望在指定时间点提醒用户有优惠活动。为满足此类业务诉求&#xf…

企业远程访问业务系统:对比MPLS专线,贝锐蒲公英为何更优优势?

如今&#xff0c;企业大多都会采用OA、ERP、CRM等各种数字化业务系统。 私有云、公有云混合架构也变得越来越常见。 比如&#xff1a;研发系统部署在公司本地私有云、确保数据安全&#xff0c;OA采用公有云方案、满足随时随地访问需求。 如此一来&#xff0c;也产生了远程访问…

Mysql基础操作(命令行)

文章目录 Mysql基础操作&#xff08;命令行&#xff09;背景创建数据库选择数据库查看所有表查看表结构向表插入数据插入第一条插入第二条插入第三条 查询表数据修改表数据删除表数据 Mysql基础操作&#xff08;命令行&#xff09; 背景 docker安装mysql8&#xff0c;映射本地…

硅光子,缘何打造量子科技的下一个十年?

/目录/ 一、硅光子技术将率先实现室温、容错量子计算机 二、用于量子科技的硅光子器件 2.1. 单光子源 2.2. 光子探测器 2.3. 波分复用技术 2.4. 低温技术 2.5. 芯片互连 三、可拓展的量子信息应用 3.1. 多光子和高维应用 3.2. 量子纠错 3.3. 量子密钥分发 3.4. 量子…

web前端开发基础------外边距折叠现象

引言 在设置样式时&#xff0c;需要遵循先整体再细节&#xff0c;先通用样式再特殊样式的顺序进行设置 一&#xff0c;什么是外边距折叠现象呢&#xff1f; 外边距折叠 定义&#xff1a; 外边距折叠是指相邻的两个或者多个外边距&#xff08;margin&#xff09;在垂直方向会合并…

【SwiftUI】7.预览及其内部机制

上一篇讲到了组件及组件化&#xff0c;从概念和优/缺点两个方向说明了组件化的意义&#xff0c;更为重要的是&#xff0c;组件和组件化是一个在编程领域&#xff0c;放之四海皆可以的概念&#xff0c;理解和运用它是非常必要的&#xff0c;希望大家能掌握。今天我们介绍另一个特…

git的使用:本地git下载、sshkey的添加、github仓库创建及文件上传

一、github创建账号 即github注册账号&#xff0c;登录github官网&#xff0c;根据提示注册即可 github官网 二、git客户端下载安装 已有很多git下载安装的博文了&#xff0c;在此就不赘述 三、sshkey的生成与添加 1、sshkey的生成以及查看 // sshkey的生成命令&#xff…

ThinkPHP6.1 多应用模式的一些事儿

TP安装就不说了&#xff0c;直接从安装完成开始了。 安装多应用模式扩展 think-multi-app composer require topthink/think-multi-app删除 app 目录下的 controller 文件夹&#xff08;TP 是根据是否有这个文件夹来判断单应用模式还是多应用模式的&#xff09;。 创建应用 …