dbscan聚类算法matlab_密度聚类DBSCAN、HDBSCAN(转)

# 密度聚类DBSCAN、HDBSCAN

DBSCAN

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇,并在具有噪声的空间数据库中发现任意形状的簇,它将簇定义为密度相连的点的最大集合。 在DBSCAN算法中将数据点分为三类:

  • 核心点(Core point)。若样本 的 邻域内至少包含了MinPts个样本,即 ( )≥ ,则称样本点 为核心点。
  • 边界点(Border point)。若样本 的 邻域内包含的样本数目小于MinPts,但是它在其他核心点的邻域内,则称样本点 为边界点。
  • 噪音点(Noise)。既不是核心点也不是边界点的点

bb52e358f82776d1764f9c910f01a849.png

1、算法的流程

  • 根据给定的邻域参数Eps和MinPts确定所有的核心对象
  • 对每一个核心对象
  • 选择一个未处理过的核心对象,找到由其密度可达的的样本生成聚类“簇”
  • 重复以上过程

伪代码:

(1) 首先将数据集D中的所有对象标记为未处理状态  (2) for(数据集D中每个对象p) do  (3)    if (p已经归入某个簇或标记为噪声) then  (4)         continue;  (5)    else  (6)         检查对象p的Eps邻域 NEps(p) ;  (7)         if (NEps(p)包含的对象数小于MinPts) then  (8)                  标记对象p为边界点或噪声点;  (9)         else  (10)                 标记对象p为核心点,并建立新簇C, 并将p邻域内所有点加入C  (11)                 for (NEps(p)中所有尚未被处理的对象q) do  (12)                       检查其Eps邻域NEps(q),若NEps(q)包含至少MinPts个对象,则将NEps(q)中未归入任何一个簇的对象加入C;  (13)                 end for  (14)        end if  (15)    end if  (16) end for

2、优点

  • 相比K-Means,DBSCAN 不需要预先声明聚类数量。
  • 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。
  • 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
  • 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。

3、缺点

  • 当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差,因为这种情况下参数MinPts和Eps选取困难。
  • 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
  • 在两个聚类交界边缘的点会视乎它在数据库的次序决定加入哪个聚类,幸运地,这种情况并不常见,而且对整体的聚类结果影响不大(DBSCAN*变种算法,把交界点视为噪音,达到完全决定性的结果。)
  • 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值eps,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

HDBSCAN聚类

1、空间变换

d2cb1461f6f32973a31de78fbbff78b6.png

所谓的空间变换,就是我们用互达距离来表示两个样本点之间的距离。这样会使得,密集区域的样本距离不受影响,而稀疏区域的样本点与其他样本点的距离被放大。这增加了聚类算法对散点的鲁棒性。空间变换的效果显然取决于K的选择,当K较大时,会使得核心距离变大,所以互达距离也变大,这样会有更多样本点被分配到稀疏区域。即更多点将被视为散点。

2、建立最小生成树

我们可将数据看作一个加权图,其中数据点为顶点,任意两点之间的边的权重为这些点之间的互达距离。对图像进行分裂。最终图的变化过程是:从完全图到极小连通子图。HDBSCAN使用最小生成树算法:

83e5428ef3c7d8fdcc0af1c7a1fa60cd.png

3、层次聚类结构

  • 第一步:将树中的所有边按照距离递增排序
  • 第二步:然后依次选取每条边,将边的链接的两个子图进行合并。

这样就构建出了聚合树:

aedff16369d5740f81c08e593fbad787.png

可以理解,类似于哈夫曼树的构造,这棵树自上而下数据之间的距离是从大到小的。

4、剪枝

同时进行剪枝,即最小子树做了限制,主要是为了控制生成的类簇不要过小:

  • 第一步:确定最小族大小n
  • 第二步:自上而下遍历聚类树,并在每个节点分裂时:看分裂产生的两个样本子集的样本数是否大于n
  • 如果左右儿子中有一个子结点的样本数< n,我们就直间将该节点删除,并且另一个子节点保留父节点的身份
  • 如果两个子结点中的样本数都<n,那么就将其两个子节点都删除,即当前节点不再向下分裂
  • 如果两个子结点中的样本数都>=n,那么我们进行正常分裂,即保持原聚类树不变。

5、提取簇

经过聚类树的压缩操作,树中已经没有了散点,我现在的任务只是将比较相近的节点合并到一族中去,我们最后选择的簇能够有更好的稳定性。

fd2d44b6751798870b0bb91e2dd51d23.png

我们可以这里理解,有一个阈值distance,如上图的红线。用它切割,面最近的节点作为聚类的一个类,而红线上面的聚起来的都是散点。问题是,我们如何知道阈值在哪里?能不能有更好的提取族的方式呢?HDBSCAN定义了一种基于稳定度的提取族方式那么如何来定义树中节点的稳定度呢? 我们先定义一个λ,它是距离的倒数:

5195153a00ef2e360dd013556b57596d.png

对于树中的某个节点定义两个量:λbirth,λdeath λbirth表示:分裂产生当前节点时,distance的倒数。 λdeath表示:当前节点被分裂成两个子结点时,distance的倒数。 λp表示:当前节点(族)下各节点p从前节点(族)分离出去时,distance的倒数。 在这里对λp做下说明,p从聚类族分离出去有两种情况:

  • λp = λdeath时,即该节点(簇)被分裂成两个子结点了
  • λbirth <= λp < λdeath时,即在该之间距离变化中可能切割出散点。此时,原来的节点(簇)并没有分裂成两个子结点,而是直接把散点给移除了。

我们定义稳定度为:

04bd516d961175ccdb863041b2aac682.png

提取簇步骤:

  • 第一步:初始化族

将压缩聚类树的每个叶节点都选定为某个簇。

  • 第二步:自下而上遍历遍历整棵树,并且每一步进行下面操作:

如果当前节点的稳定性小于两个子结点的稳定性总和,那么我们将该节点的稳定性设置为其子节点的稳定性之和。如果当前节点的稳定性大于两个子结点的稳定性总和,那么将当前节点定为某个簇。

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

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

相关文章

Spark IDEA 编程环境配置

文章目录1. 下载资料准备2. 建立项目、添加环境设置3. 第一个 Spark 程序学自&#xff1a;Spark机器学习实战 https://book.douban.com/subject/35280412/ 记录一下踩过的坑&#xff1a; 环境&#xff1a;win 10 java 1.8.0_281 Scala 2.11.11 Hadoop 2.7.7 Spark2.4.7 …

天池 在线编程 订单分配(回溯)

文章目录1. 题目2. 解题1. 题目 描述 打车派单场景, 假定有N个订单&#xff0c;待分配给N个司机。 每个订单在匹配司机前&#xff0c;会对候选司机进行打分&#xff0c;打分的结果保存在N*N的矩阵score&#xff0c;其中score[i][j]代表订单 i 派给司机 j 的分值。 假定每个订单…

2015年北京户口全攻略

最新统计数据指出 截至2013年底&#xff0c;北京市常住人口为2114.8万人&#xff0c;其中常住外来人口为802.7万人。和“北京户口”捆绑的字眼&#xff0c;历来是身份、福利&#xff0c;以至于幸福感、安全感。那么北京户口有什么好处&#xff1f;外来人口如何落户北京呢&#…

水晶报表 jar包版本过低_工具类学习-UReport报表设计器整合

dada-report报表整合UReport报表设计器工具结合日常工作和学习实践&#xff0c;针对传统报表子站面临的问题&#xff0c;尝试借助UReport报表设计器解决1.可在现有工程基础上引入Ureport2报表设计器Ureport报表设计器是一个基于WEB的在线报表设计器&#xff0c;其具有良好的界面…

LeetCode 1844. 将所有数字用字符替换

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的字符串 s &#xff0c;它的 偶数 下标处为小写英文字母&#xff0c;奇数 下标处为数字。 定义一个函数 shift(c, x) &#xff0c;其中 c 是一个字符且 x 是一个数字&#xff0c;函数返回字母表中 c 后面第 x 个字符。 …

LeetCode 1845. 座位预约管理系统(set)

文章目录1. 题目2. 解题1. 题目 请你设计一个管理 n 个座位预约的系统&#xff0c;座位编号从 1 到 n 。 请你实现 SeatManager 类&#xff1a; SeatManager(int n) 初始化一个 SeatManager 对象&#xff0c;它管理从 1 到 n 编号的 n 个座位。所有座位初始都是可预约的。in…

unity game和scene效果不一样_不同的真石漆装饰效果也是不一样的

外墙真石漆真的是一件很好的产品&#xff0c;具有防火性、防水性、安全且环保、粘力强、永不褪色等特点&#xff0c;无疑是人们较好的选择&#xff0c;在很早之前就已经逐渐的取代了瓷砖和其他石材在人们心中的位置。真石漆的品种不止一种&#xff0c;按照装饰效果我们可以分为…

噪声产生原因_空调噪声大?啄木鸟家庭维修,看看属于哪一个问题

夏天终于要结束了&#xff0c;我只想安静的睡一个好觉。这个夏天中&#xff0c;楼上的空调每夜不休不眠的工作着&#xff0c;可这个空调为什么运作时的声音这么“巨大”。“轰轰轰……”&#xff0c;楼层都似乎和它产生了共振。而每晚的我&#xff0c;反反复复努力入睡&#xf…

05-按钮的基本使用-开发步骤

从Xcode5开始&#xff0c;图片资源都放到Images.xcassets中进行管理先添加必须的图片到Images.xcassets中调整界面尺寸 由于模拟器的默认尺寸是3.5inch&#xff0c;为了避免出现不必要的麻烦&#xff0c;最好将storyboard中的UI界面尺寸也调整为3.5inch添加4个方向按钮和2个缩放…

【机器学习】sklearn数据特征预处理:归一化和标准化

归一化处理 特点&#xff1a;通过对原始数据进行变换把数据映射到(默认为[0,1])之间 from sklearn.preprocessing import MinMaxScaler def mm():"""归一化处理:return: NOne"""mm MinMaxScaler(feature_range(2,3))data mm.fit_transform(…

LeetCode 1848. 到目标元素的最小距离

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff08;下标 从 0 开始 计数&#xff09;以及两个整数 target 和 start &#xff0c;请你找出一个下标 i &#xff0c;满足 nums[i] target 且 abs(i - start) 最小化 。注意&#xff1a;abs(x) 表示 x 的绝对值。…

【机器学习】sklearn数据集获取、分割、分类和回归

sklearn数据集1、数据集划分1.1 获取数据1.2 获取数据返回的类型举个栗子&#xff1a;1.3 对数据集进行分割举个栗子&#xff1a;2、 sklearn分类数据集3、 sklearn回归数据集1、数据集划分 机器学习一般的数据集会划分为两个部分&#xff1a; 训练数据&#xff1a;用于训练&a…

LeetCode 1846. 减小和重新排列数组后的最大元素

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 arr 。请你对 arr 执行一些操作&#xff08;也可以不进行任何操作&#xff09;&#xff0c;使得数组满足以下条件&#xff1a; arr 中 第一个 元素必须为 1 。任意相邻两个元素的差的绝对值 小于等于 1 &#xff0c;也就是…

ftp可以传输什么类型文件_FTP文件传输工具-ForkLift for Mac

orklift mac版是一款运行在Mac平台上的FTP文件传输工具。ForkLift拥有经典的两栏界面布局&#xff0c;简洁小巧。且支持FTP&#xff0c;SFTP&#xff0c;WebDAV&#xff0c;S3&#xff0c;iDisk&#xff0c;SMB&#xff0c;AFP和NIS协议&#xff0c;可以方便用户对本地以及远程…

1过程流程图 3 apqp_为什么过程开发的平面布置图要遵循精益原则?

今日话题为什么过程开发的平面布置图要遵循精益原则&#xff1f;问为什么过程开发的平面布置图要遵循精益原则&#xff1f;答工艺工程师根据过程流程图制定平面布置图&#xff0c;采用精益制造的原则&#xff0c;对加工与装配工位、物流路线、存储位置进行规划&#xff0c;以确…

LeetCode 1847. 最近的房间(排序离线计算 + 二分查找)

文章目录1. 题目2. 解题1. 题目 一个酒店里有 n 个房间&#xff0c;这些房间用二维整数数组 rooms 表示&#xff0c;其中 rooms[i] [roomIdi, sizei] 表示有一个房间号为 roomIdi 的房间且它的面积为 sizei 。每一个房间号 roomIdi 保证是 独一无二 的。 同时给你 k 个查询&…

【机器学习】sklearn k-近邻算法

sklearn k-近邻算法1. sklearn k-近邻算法API2. k近邻算法实例-预测入住位置核心思想&#xff1a;你的“邻居”来推断出你的类别定义&#xff1a;如果一个样本在特征空间中的 k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别&#xff0c;则该样本也属于这个类别。…

LeetCode 1849. 将字符串拆分为递减的连续值(回溯)

文章目录1. 题目2. 解题1. 题目 给你一个仅由数字组成的字符串 s 。 请你判断能否将 s 拆分成两个或者多个 非空子 字符串 &#xff0c;使子字符串的 数值 按 降序 排列&#xff0c;且每两个 相邻子字符串 的数值之 差 等于 1 。 例如&#xff0c;字符串 s "0090089&q…

flutter text 最大长度_Flutter小技巧之TextField换行自适应

无论哪种界面框架输入文本框都是非常重要的控件, 但是发现flutter中的输入框TextField介绍的虽然多,但是各个属性怎么组合满足需要很多文章却说不清楚, 再加上控件版本变更频繁很多功能的介绍都是比较陈旧的属性.现在就需要一个类似微信的输入文本框, 这样一个非常实用的效果fl…

【机器学习】分类算法sklearn-朴素贝叶斯算法

分类算法-朴素贝叶斯算法1. 概率基础2. 朴素贝叶斯介绍3. sklearn朴素贝叶斯实现API4. 朴素贝叶斯算法案例1. 概率基础 概率定义为一件事情发生的可能性&#xff1a;扔出一个硬币&#xff0c;结果头像朝上&#xff1b;某天是晴天 联合概率和条件概率“”&#xff1a; 联合概率…