【机器学习】密度聚类算法之HDBSCAN

链接

一、概述

  • 先看一下HDBSCAN的具体定义:HDBSCAN – Hierarchical Density-Based Spatial Clustering of Applications with Noise. Performs DBSCAN over varying epsilon values and integrates the result to find a clustering that gives the best stability over epsilon. This allows HDBSCAN to find clusters of varying densities (unlike DBSCAN), and be more robust to parameter selection.
  • 可以知道是DBSCAN算法与基于层次聚类算法结合而来的,其实HDBSCAN算法是对OPTICS算法的一种改进。

  • HDBSCAN算法的具体过程分为以下几步
    • 空间变换
    • 构建最小生成树
    • 构建聚类层次结构(聚类树)
    • 压缩聚类树
    • 提取簇

二、空间变换

  • 核心距离:我们将样本与第k个最近邻样本点的距离称为核心距离,并表示为 c o r e k ( x ) core_k (x) corek(x)
    c o r e k ( x ) = d ( x , N k ( x ) ) core_k (x)=d(x,N^k (x)) corek(x)=d(x,Nk(x))
  • 互达距离:两个样本点的互达距离定义为: d m r e a c h − k ( a , b ) = m a x { c o r e k ( a ) , c o r e k ( b ) , d ( a , b ) } d_{mreach-k} (a,b)=max \{core_k (a),core_k (b),d(a,b)\} dmreachk(a,b)=max{corek(a),corek(b),d(a,b)}在该式中密集点(核心距离较小的点)彼此保持相同的距离,但较稀疏的点被推开,使得其与其他点的距离最少是它的核心距离(比较大)。
  • 空间变换:所谓的空间变换,就是我们用互达距离来表示两个样本点之间的距离。这样会使得,密集区域的样本距离不受影响,而稀疏区域的样本点与其他样本点的距离被放大。这增加了聚类算法对散点的鲁棒性。
  • 这里需要注意的是,空间变换的效果显然取决于 k k k的选择,当 K K K较大时,会使得核心距离变大所有相互可达距离变大,这样会有更多样本点被分配到稀疏区域。即更多点将被视为散点。
  • 下图为 k = 5 k=5 k=5的三个点的核心距离示意图:
  • 蓝点和绿点之间的相互可达距离如下:
  • 红点和绿点之间的相互可达距离更大如下:

三、建立最小生成树

  • 现在我们在数据上有了一个新的距离度量:互达距离
  • 我们可将数据看作一个加权图,其中数据点为顶点,任意两点之间的边的权重为这些点之间的互达距离。
  • 现在考虑一个阈值,阈值从高开始逐步降低。删除任何权重超过该阈值的边,对图像进行分裂。最终图的变化过程是:从完全连接到完全不连接。
  • 在实践中,这样逐步减小阈值去分裂图的方法时间复杂度 ( O ( n 2 ) ) (O(n^2)) (O(n2))较高。正确的做法是找到一个最小的边集合,这样从集合中删除任何边都会导致图分裂。这个最小的边集合 就是图的最小生成树
  • 我们可以通过 Prim 算法非常有效地构建最小生成树树,如下图所示:

四、构建聚类层次结构

  • 给定最小生成树,下一步是将其转换为图分裂的层次结构
  • 这很容易以逆向思维完成这件事:
    • 第一步:将树中的所有边按照距离递增排序
    • 第二步:然后依次选取每条边,将边的链接的两个子图进行合并。
    • 这里唯一困难的部分是确定每条边所关联的两个子图,这个可以通过并查集很好的实现
    • 这个分裂算法有点像哈夫曼树的生成过程。
  • 我们可以将结果视为树状图,如下图所示:
  • 上图中的纵轴为距离可以理解为第二部分所说的阈值,当确定某个阈值,就相当于在上图中画一个横线,如下图所示:
  • 我们可以将红线下面最近的节点作为聚类的一个类,而红线上面的聚起来的都是散点。这就是 DBSCAN的实现逻辑,问题是,我们如何知道界限在哪里?DBCSCAN只是将其作为一个参数。
  • 上图是一个二叉树结构,每个节点代表的是一个样本子集,最上面的根节点表示的是所有样本点,即整个样本集,每个节点的两条边表示的是当前节点的分裂,每次分裂都是去掉最小生成树的一条边,从上到下,相当于先选择最大的边进行分裂,每次分裂都对应着一个距离,就是所去掉的边的长度。
  • 上面的二叉树称为聚类树

五、压缩聚类树

  • 簇抽取的第一步是将庞大而复杂的聚类树压缩到一个更小的树中。其实质就是去掉散点
  • 最小族大小:每个族中样本数的最小值。我们将它作为HDBSCAN的一个参数。
  • 压缩聚类树步骤
    • 第一步:确定最小族大小
    • 第二步:当最小簇大小确定了后,我们就可以自上而下遍历聚类树,并在每个节点分裂时:看分裂产生的两个样本子集的样本数是否大于最小族大小
      • 如果左右儿子中有一个子结点的样本数少于最小族大小,我们就直间将该节点删除,并且另一个子节点保留父节点的身份
      • 如果两个子结点中的样本数都小于最小族大小,那么就将其两个子节点都删除,即当前节点不再向下分裂
      • 如果两个子结点中的样本数都大于最小族大小,那么我们进行正常分裂,即保持原聚类树不变。
  • 在遍历了整个聚类树之后,我们最终得到了一个拥有少量节点的聚类树.如下图所示:
    用线的宽度来表示簇中的点数。由于有节点的删除宽度随逐渐变小
  • 图中 λ λ λ为距离的倒数,即: λ = 1 d i s t a n c e λ=\frac{1}{distance} λ=distance1

六、提取簇

  • 这一步我们需要从压缩的聚类树种提取聚类的族。所谓的提取族就是为压缩聚类树的每个节点打上一个类标签。
  • 这里有一个显而易见的原则:如果你选择了某个节点作为某一族(即给它打上某族的标签),那么它的子结点都属于这个族。
  • 经过聚类树的压缩操作,树中已经没有了散点,我现在的任务只是将比较相近的节点合并到一族中去,我们最后选择的簇能够有更好的稳定性
  • 那么如何来定义树中节点的稳定性呢?
    • 我们先定义一个 λ λ λ,它是距离的倒数: λ = 1 d i s t a n c e λ=\frac{1}{distance} λ=distance1
    • 对于树中的某个节点定义两个量: λ b i r t h , λ d e a t h λ_{birth},λ_{death} λbirthλdeath
      • λ b i r t h λ_{birth} λbirth表示:分裂产生当前节点时,对应断开边长度的倒数。
      • λ d e a t h λ_{death} λdeath表示:当前节点被分裂成两个子结点时,对应断开边长度的倒数。
      • 根据定义有: λ b i r t h &lt; λ d e a t h λ_{birth}&lt;λ_{death} λbirth<λdeath
    • 对于每个节点种每个样本点 p p p定义一个量: λ p λ_p λp
      • λ p λ_p λp表示:样本点 p p p因为分裂离开该节点时,对应断开边长度的倒数。当前节点分裂使得样本 p p p离开当前节点有两种情况:
        • 当前节点分裂出的右儿子中有一个子结点的样本数少于最小族大小,这时我们是直间将该节点删除,并且另一个子节点保留父节点的身份,而并且样本 p p p在被删掉的子结点中,即样本 p p p是散点,这时 λ b i r t h &lt; λ p &lt; λ d e a t h λ_{birth}&lt;λ_p&lt;λ_{death} λbirth<λp<λdeath
        • 当前节点分裂出的两个子结点中的样本数都大于最小族大小,这时我们进行正常分裂,这样样本 p p p进入当前节点的一个子结点。 λ p = λ d e a t h λ_p=λ_{death} λp=λdeath
    • 现在我们将每个节点的稳定性定义为: s c l u s t e r = ∑ p ∈ c l u s t e r ( λ p − λ d e a t h ) s_{cluster}=∑_{p∈cluster}(λ_p-λ_{death} ) scluster=pcluster(λpλdeath)
    • 由上面公式可知: s c l u s t e r ≤ 0 s_{cluster}≤0 scluster0并且稳定性越大说明该节点中的散点越少。

  • 提取簇步骤
    • 第一步:初始化族
      • 将压缩聚类树的每个叶节点都选定为某个簇。
    • 第二步自下而上遍历遍历整棵树,并且每一步进行下面操作:
      • 如果当前节点的稳定性小于两个子结点的稳定性总和,那么我们将该节点的稳定性设置为其子节点的稳定性之和
      • 如果当前节点的稳定性大于两个子结点的稳定性总和,那么将当前节点定为某个簇,并且删除所有子节点。
  • 我们可以通过这个算法选择上面压缩聚类树的聚类,得到下面结果:
    不同颜色的圈表示不同的族,上图将样本分为三个族。

  • 我们将聚类产生的散点(即压缩聚类树时删除的节点)标为-1类,
  • 对于每个簇,族中每个样本点 P P P都有一个 λ p λ_p λp;我们将其进行简单地规范化使其取值范围从0到1,用它来度量度样本点 p p p成员资格的强度,即 λ p λ_p λp越大说明样本点 p p p越接近该族的中心。下图用不同颜色表示不同族,颜色的深浅表示标准的 λ p λ_p λp的大小:
  • 21
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 机器学习是一种通过利用算法和模型,使计算机能够从数据中学习和识别模式以做出决策或预测的技术。聚类算法机器学习中用于将数据分组成不同类别或簇的一种方法。而MATLAB是一种功能强大的数值计算和科学编程环境,具有丰富的工具箱和函数来支持机器学习和图像处理。 MATLAB中的聚类算法可以通过分析图像的像素值或特征来将图像中的像素分为不同的组。聚类算法的目标是使同一组内的像素具有相似的特征,而不同组的像素具有不同的特征。 在使用MATLAB进行图像聚类时,首先需要选择适当的聚类算法,如k-means、谱聚类或层次聚类等。然后,将图像加载到MATLAB中,并将其转换为适当的数据表示形式,例如像素值的向量或特征矩阵。 接下来,需要选择适当的聚类参数,如聚类的数量、距离度量方法和停止准则等。然后,使用所选的聚类算法对图像进行聚类,并将像素分配到不同的簇中。 一旦完成聚类,就可以根据每个簇的像素值或特征来进行组内或组间的图像处理。例如,可以为每个簇选择不同的颜色,以便直观地可视化聚类结果。还可以根据簇的特征进行进一步的分析和处理,例如物体检测、图像分割或图像检索等。 总之,机器学习MATLAB聚类算法对图像进行处理,通过将图像中的像素分组成不同的簇,实现对图像的分析和处理,为图像处理和计算机视觉等领域提供了强大的工具和方法。 ### 回答2: 机器学习matlab聚类算法可以应用于图像处理中,通过对图像中的像素进行聚类分析,实现对图像的分割、表征和分类等任务。 在图像分割的应用中,聚类算法可以将图像中的像素按照相似性进行聚类,将相似的像素分为同一类别。通过分割,可以将图像中的目标区域从背景中提取出来,为后续的图像识别、特征提取等任务提供基础。 在图像表征的应用中,聚类算法可以将图像中的像素进行聚类,并为每个聚类赋予一个代表性的特征向量。这些特征向量可以用于描述图像的内容和特征,比如颜色直方图、纹理特征等。通过聚类得到的特征向量,可以对整个图像集进行整体分析和比对。 在图像分类的应用中,聚类算法可以将图像集中的图像进行分组,将相似的图像归为同一类别。通过聚类得到的类别信息,可以实现图像集的自动分类和标记,降低人工处理的工作量。 总之,机器学习matlab聚类算法在图像处理中具有广泛的应用,可以实现图像分割、表征和分类等任务,为图像处理领域的研究和应用提供强大的工具和方法。 ### 回答3: 机器学习(matlab)聚类算法对图像进行处理是一种常见的图像分析和处理技术。聚类算法是一种无监督学习方法,可以将相似的图像分成一组。这种技术可以用于图像识别、图像分类和图像检索等任务。 在图像处理中,聚类算法可以通过计算图像像素的相似度来将图像分成不同的类别。常见的聚类算法有K均值聚类、层次聚类和谱聚类等。这些算法可以根据图像的像素值、颜色、纹理或其他特征来对图像进行分组。 聚类算法对图像的处理可以帮助我们理解图像的结构和内容。例如,通过将图像分成不同的类别,我们可以识别出图像中的不同物体或场景。这对于图像检索和图像分类非常有用。 机器学习(matlab)聚类算法在图像处理中的应用非常广泛。例如,可以将聚类算法应用于图像分割,将图像中的不同对象分开。聚类算法还可以应用于图像压缩,通过将相似的像素分组来减小图像文件的大小。 此外,聚类算法还可以用于图像的特征提取。通过对图像进行聚类分析,我们可以发现图像中的重要特征,并将其用于其他图像处理任务,比如目标检测和图像识别。 总之,机器学习(matlab)聚类算法对图像的处理可以帮助我们理解图像的结构和内容,实现图像分割、压缩和特征提取等任务。这种技术在计算机视觉和图像处理领域具有重要的应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值