漫步密度森林:借助HDBSCAN实现高效数据聚类

文章来源:navigating-the-density-forest-harnessing-hdbscan-for-advanced-data-clustering

2024 年 4 月 9 日

介绍

在数据科学中,聚类算法是揭示数据集内在结构的重要工具。在这些工具中,基于分层密度的噪声应用空间聚类 (HDBSCAN) 作为一种强大且通用的方法脱颖而出,用于发现不同形状和密度的聚类。本文深入研究了 HDBSCAN 的操作机制,阐明了其相对于传统聚类算法的优势,并讨论了其在实际场景中应用的实际考虑因素。

1

背景介绍

HDBSCAN (Hierarchical Density-Based Spatial Clustering of Applications with Noise) 是一种先进的聚类算法,它将 DBSCAN 转换为分层聚类算法,然后使用一种技术从分层树中提取平面聚类,从而扩展了 DBSCAN。以下是 HDBSCAN 的一些关键方面:

  • 分层聚类: HDBSCAN 通过创建树枝图来建立聚类的层次结构,这使得聚类分配比 DBSCAN 更细致入微。
  • 基于密度: 与 DBSCAN 一样,HDBSCAN 也侧重于高密度区域,并试图将密度相似的区域连接成簇。它对噪声有很强的抗干扰能力,并能处理不同形状和大小的簇。
  • 无需指定聚类数量: 许多聚类算法需要事先指定聚类的数量,而 HDBSCAN 则不同,它会根据数据自动确定适当的聚类数量。
  • 最小聚类大小: HDBSCAN 需要指定的主要参数是最小聚类大小,这有助于控制聚类的粒度。
  • 处理噪声:HDBSCAN 能有效识别和排除噪声,将不适合任何聚类的数据点归入 "噪声 "类别。
  • 应用:HDBSCAN 可用于异常检测、数据分析和生物信息学等多个领域,在这些领域中,了解未标记数据的固有分组情况至关重要。

HDBSCAN 在探索性数据分析中尤其有用,在这种分析中,数据结构是未知的,用户有兴趣识别数据集中的密集群组和异常值。

了解 HDBSCAN

HDBSCAN 的核心是将 DBSCAN 算法扩展到分层聚类框架中,增强其检测不同密度聚类的能力。该算法首先要构建一个 "互达距离 "图,作为构建连接组件层次结构的基础。这种层次结构以树枝图的形式表示,囊括了数据的密度聚类结构。

HDBSCAN 的一个显著特点是能够自动确定最佳聚类比例。为此,它将树状图转换成一棵浓缩树,树枝代表在不同密度阈值下持续存在的聚类。然后,该算法会根据聚类的持久性提取稳定的聚类,从而有效地识别出在不同尺度下仍保持高密度的群组。

与传统聚类方法相比的优势

HDBSCAN 具有多项优势,是许多从业人员的首选:

  1. 自动选择聚类: 与 K-means 或标准 DBSCAN 不同,HDBSCAN 无需预先指定聚类的数量,而这在实际数据分析中往往是一个具有挑战性的决定。这一特点减轻了手动调整参数的负担,尤其是在探索性数据分析阶段。
  2. 处理噪声和异常值: HDBSCAN 能将噪声和异常值与重要数据点区分开来,从而提高所形成聚类的纯度。在异常检测等应用中,区分正常数据和异常数据至关重要,而这一特性尤其有益。
  3. 聚类形状的灵活性: 该算法基于密度的方法使其能够识别任意形状和大小的聚类,与 K-means 等假定聚类为球形的方法相比,它更能适应复杂的数据结构。

实际考虑因素

要在实践中有效利用 HDBSCAN,数据从业人员需要考虑以下几个因素:

  • 数据预处理: 与许多聚类算法一样,HDBSCAN 的性能也会受到数据规模和性质的显著影响。对特征进行适当的规范化或标准化是确保算法准确捕捉底层数据结构的关键。
  • 最小簇大小: HDBSCAN 的主要参数--最小聚类大小需要仔细选择。它决定了聚类的粒度,应根据具体情况和分析目标进行选择。
  • 可解释性和验证: 虽然 HDBSCAN 减少了对任意参数选择的需求,但解释由此产生的聚类并验证其与问题的相关性仍然至关重要。结合领域知识,利用剪影分数或其他验证指标,有助于评估聚类结果的质量和相关性。

代码

要说明在 Python 中使用 HDBSCAN 处理合成数据集的完整过程,包括特征工程、超参数调整、度量、绘图和解释,我们可以遵循以下步骤:

  1. 生成合成数据集。
  2. 执行特征工程
  3. 应用 HDBSCAN 聚类。
  4. 调整超参数
  5. 用指标进行评估。
  6. 结果可视化
  7. 解释结果。

以下是如何将这些功能整合到一个代码块中:

import seaborn as sns
import numpy as np
import pandas as pd
from sklearn.datasets import make_moons
from sklearn.preprocessing import StandardScaler
import hdbscan
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
# 1. Generate a synthetic dataset
X, _ = make_moons(n_samples=300, noise=0.1, random_state=42)
X = StandardScaler().fit_transform(X)  # Standardize for better clustering performance
# 2. Feature engineering (in this case, simple standardization)
X_standardized = StandardScaler().fit_transform(X)
# 3. Apply HDBSCAN clustering
clusterer = hdbscan.HDBSCAN(min_cluster_size=5, gen_min_span_tree=True)
labels = clusterer.fit_predict(X_standardized)
# 4. Hyperparameter tuning (skipping extensive tuning for brevity, but typically involves grid search or similar)
# 5. Evaluate with metrics
silhouette_avg = silhouette_score(X_standardized, labels)
print(f'Silhouette Score: {silhouette_avg:.2f}')
# 6. Visualize the results
plt.figure(figsize=(10, 8))
plt.scatter(X_standardized[:,0], X_standardized[:,1], c=labels, cmap='Spectral', s=50)
plt.title("HDBSCAN Clustering")
plt.colorbar(label='Cluster Label')
# Plot the cluster hierarchy
clusterer.condensed_tree_.plot(select_clusters=True,
                               selection_palette=sns.color_palette('deep', 8))
# 7. Interpret the results
# Clusters are colored differently and noise points are typically colored in grey or black
# Silhouette score provides a metric for the cohesiveness of the clusters formed
print(f'Total clusters: {len(np.unique(labels)) - (1 if -1 in labels else 0)}')
print("Note: Negative label (-1) indicates noise points")

在这个例子中:

  • 使用 sklearn 中的 make_moons 生成了一个合成数据集,该数据集创建了两个交错的半圆,这是聚类算法的一个典型测试案例。
  • 在这种情况下,特征工程是最小的,因为我们处理的是一个简单的合成数据集,所以我们将特征标准化。
  • 我们使用 HDBSCAN 对数据进行聚类,并将 min_cluster_size 作为主要的超参数。
  • 我们可以使用网格搜索或贝叶斯优化等技术来找到超参数调整的最佳值,不过这里并没有广泛展示。
  • 轮廓分数(silhouette_score)用于评估聚类性能,衡量一个对象与其聚类中其他对象的相似程度。
  • 使用散点图对结果进行可视化,并通过浓缩树状图显示聚类层次,从而深入了解聚类的形成。
  • 解释工作包括分析图和指标,以了解聚类结构和算法在捕捉数据固有分组方面的有效性。

2

下面是使用 make_moons 函数生成的合成数据集的曲线图。这个数据集经常被用来演示聚类算法检测非线性模式的能力。它由两个交错的半圆组成,代表了一种传统线性聚类方法可能难以胜任,但 HDBSCAN 等算法却能大显身手的情况。

3

HDBSCAN 聚类算法生成了这幅浓缩树状图。以下是如何解释该图的各个部分:

  • y 轴上的 λ 值: 这表示数据集中形成聚类的距离尺度。λ值越高,说明各点之间的距离越近,才能被视为同一聚类的一部分。随着 y 轴向下移动(λ 值越高),我们观察数据集的尺度就越小,因此,聚类将趋于合并。
  • 树枝: 每条垂直线代表给定 λ 值下的一个潜在聚类。当 λ 值增大时(即在图中向下移动时),横线会将合并的聚类连接起来。
  • λ=0时的彩条:颜色代表 HDBSCAN 识别出的不同聚类,每个彩条的长度与该聚类中的点数成正比。未包含在彩条内的点通常被视为噪声。
  • 椭圆: 它们通常突出显示特定的群集或感兴趣的点。它们表示在 λ 值范围内选定的稳定聚类,因此根据算法是可靠的。
  • 右侧为颜色图例: 这说明了颜色与群组标签之间的映射关系。左侧的条形图可能表示每个聚类在不同层次结构中的点数,颜色越深代表点数越多,颜色越浅代表点数越少。

在这幅图中,突出的黄色聚类表明在所选 λ 值临界点上有一个界限分明的大型聚类。在 λ=0 时,其他颜色的条形图显示有几个较小的群集,这表明数据集中有不同密度的密集区域(即有些密集,有些不那么密集)。

Silhouette Score: 0.23
Total clusters: 3
Note: Negative label (-1) indicates noise points

总之,这幅图显示了 HDBSCAN 发现的分层聚类结构,在不同的密度水平上发现了几个聚类,在较高λ 水平上可能存在大量噪声或连接不那么密集的点。

结论

HDBSCAN 是聚类分析领域的一大进步,为揭示复杂数据集中的潜在结构提供了灵活而强大的工具。通过自动确定聚类数量并有效处理噪声和异常值,从业人员可以将更多精力放在数据分析的解释性方面。然而,与任何分析方法一样,HDBSCAN 的成功应用也需要对其机制有细致入微的了解,对数据进行周到的预处理,并仔细考虑聚类参数。如果运用得当,HDBSCAN 可以揭示错综复杂的数据模式,有助于在从市场研究到生物信息学等各个领域做出有见地的决策。

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

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

相关文章

arm中模/数转换器工作原理以及I2C工作原理

ADC介绍 什么是ADC ADC就是模拟到数字转换器(Analog-to-Digital Converter)的缩写。 它是一种电子设备或模块,S3C2440内部拥有一个ADC外设。用于将连续变化的模拟信号转换为离散的数字信号,以便数字系统(如微处理器、微控制器等)能够对其进行处理和分析。 模拟信号:一…

Spring学习(二)

图解: 2.核心容器总结 2.2.1 容器相关 BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载 ApplicationContext接口是Spring容器的核心接口,初始化时bean立即加载 ApplicationContext接口提供基础的be…

【GDAL-Python】10-在Python中可视化多波段卫星影像

文章目录 1-介绍1.1 主要内容1.2 线性拉伸介绍 2-代码实现2.1 数据介绍2.2 代码实现2.3 效果显示 4-参考资料 1-介绍 1.1 主要内容 (1)在本教程中,主要介绍如何使用 Python 和 matplotlib 可视化多波段 Landsat 8 卫星影像组成的真彩色影像…

新能源锂电池起火自燃怎么办?全氟己酮自动灭火装置可以提前预防!

3月28日晚,广州市天河区某小区一居民楼突发火灾。据消防部门通报,此次火灾因室外电动自行车(未充电状态)发生自燃引起,烧毁一辆电动自行车,无人员伤亡。无独有偶,新能源汽车和自行车起火自燃的事…

1.2MHz,固定频率白光LED驱动器

一、产品概述 TX6216是一款升压转换器,设计用于通过单节锂离子电池驱动多达7个串联的白光LED。 TX6216采用电流模式,固定频率架构来调节LED电流,LED电流通过外部电流检测电阻测量。其低104mV反馈电压可降低功率损耗并提高效率。 TX6216具有…

5种方法,教你如何清理接口测试后的测试数据

在接口测试之后,清理测试数据是一个很重要的步骤,以确保下一次测试的准确性和一致性。以下是一些常见的测试数据清理方法: 1. 手动清理: 这是最基本的方法,即手动删除或重置测试数据。您可以通过访问数据库、控制台或…

数据结构学习之路--实现带头双向循环链表的详解(附C源码)

嗨嗨大家~本期带来的内容是:带头双向循环链表的实现。在上期文章中我们提到过带头双向循环链表,那么它的实现又是怎样的呢?今天我们来一探究竟! 目录 前言 一、认识带头双向循环链表 1 认识双向链表 2 带头双向循环链表的定…

【精读文献】Scientific data|2017-2021年中国10米玉米农田变化制图

论文名称:Mapping annual 10-m maize cropland changes in China during 2017–2021 第一作者及通讯作者:Xingang Li, Ying Qu 第一作者单位及通讯作者单位:北京师范大学地理学部 文章发表期刊:《Scientific data》&#xff08…

如何在 VM 虚拟机中安装 OpenEuler 操作系统保姆级教程(附链接)

一、VMware Workstation 虚拟机 若没有安装虚拟机的可以参考下篇文章进行安装: 博客链接https://eclecticism.blog.csdn.net/article/details/135713915 二、OpenEuler 镜像 点击链接前往官网 官网 选择第一个即可 三、安装 OpenEuler 打开虚拟机安装 Ctrl …

【C++】哈希一

这篇博客要说的是哈希算法,哈希又称为散列,它是将存储的值和存储的位置建立起关联关系的一种算法,或者说是一种将任意长度的数据映射为固定长度的输出的算法。 什么意思呢?我们来看一个例子:比如说我们要存储1&#xf…

控制某个对象缩放

效果如下: 您只需要控制此对象进行激活,将对象设置为:gameObject.SetActive(true);即可实现此次效果 代码如下: public class StartShowRun : MonoBehaviour {Transform _localTransfrom;Vector3 _localScale;public AnimationC…

高效可扩展,使用Dask进行大数据分析

大家好,Dask技术作为并行计算领域的创新力量,正在重塑大数据的处理模式。这项开源项目为Python语言带来了强大的并行计算能力,突破了传统数据处理在扩展性和性能上的瓶颈。 本文将介绍Dask的发展历程、架构设计,并分析其在大数据…

Qt中连接mysql

1、安装mysql,workbench,为mysql添加环境变量 2、安装Qt带src,然后到如下目录,找到mysql.pro(建议做个副本先) http://D:\Qt\Qt5.13.2\5.13.2\Src\qtbase\src\plugins\sqldrivers\mysql mysql.pro 注意路径的 \ / 和双引号的使…

算法练习第15天|226.翻转二叉树

226.翻转二叉树 力扣链接https://leetcode.cn/problems/invert-binary-tree/description/ 题目描述: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出&am…

高分二号卫星(GF-2):中国遥感科技的新高度

​高分二号卫星(GF-2)是中国在高分辨率地球观测领域的重要成就,其引入了先进的成像技术和灵活的数据获取模式,为地球资源监测、环境保护、城市规划等领域提供了强大的数据支持。本文将深入介绍高分二号卫星的技术特点、成像能力以…

软件测试---性能测试

1.常见的性能问题有哪些 如图所示 系统内部以及软件的代码实现 1,资源泄漏,包括内存泄漏。 2,CPU使用率达到100%,系统被锁定等。 3,线程死锁,阻塞等造成系统越来越慢。 4,查询速度慢&#xff0c…

Console口和Telnet功能配置实验

一、基础配置 <Huawei>system-view //进入系统视图 Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable //关闭接口提示 Info: Information center is disabled. [Huawei]sysname AR1 //配置设备名为 R1 [AR1]interface GigabitEthern…

pta L1-027 出租

L1-027 出租 分数 20 全屏浏览 切换布局 作者 陈越 单位 浙江大学 下面是新浪微博上曾经很火的一张图&#xff1a; 一时间网上一片求救声&#xff0c;急问这个怎么破。其实这段代码很简单&#xff0c;index数组就是arr数组的下标&#xff0c;index[0]2 对应 arr[2]1&#x…

steam怎么退款?steam退款教程?简单几步即可轻松实现退款

steam怎么退款&#xff1f;steam退款教程&#xff1f;简单几步即可轻松实现退款 说到steam平台大家肯定不会陌生&#xff0c;随着现代的发展&#xff0c;在steam上进行购买游戏已经成了很普遍的东西&#xff0c;但是许多玩家在购买游戏试完之后发现游戏并不符合自己的胃口&…

transformer上手(9)—— 翻译任务

运用 Transformers 库来完成翻译任务。翻译是典型的序列到序列 (sequence-to-sequence, Seq2Seq) 任务&#xff0c;即对于每一个输入序列都会输出一个对应的序列。翻译在任务形式上与许多其他任务很接近&#xff0c;例如&#xff1a; 文本摘要 (Summarization)&#xff1a;将长…