使用scikit-learn-contrib/hdbscan进行密度聚类算法对比分析
hdbscan 项目地址: https://gitcode.com/gh_mirrors/hd/hdbscan
概述
密度聚类是机器学习中重要的无监督学习方法,特别适用于发现任意形状的簇。本文将通过一个实际案例,对比分析HDBSCAN与传统DBSCAN算法的性能差异,帮助读者理解HDBSCAN的优势和适用场景。
密度聚类算法简介
DBSCAN算法
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种经典的密度聚类算法,它通过定义邻域半径(eps)和最小样本数(min_samples)来识别高密度区域。但DBSCAN存在一个主要缺点:难以同时处理不同密度的簇。
HDBSCAN算法
HDBSCAN(Hierarchical Density-Based Spatial Clustering of Applications with Noise)是DBSCAN的改进版本,它通过构建层次聚类树,自动选择最优的密度阈值,从而能够识别不同密度的簇。HDBSCAN不需要预先指定邻域半径,只需设置min_cluster_size参数。
实验设计与实现
数据准备
我们首先生成一个包含不同密度簇的合成数据集:
centers = [[1, 1], [-1, -1], [1, -1]]
densities = [0.2, 0.35, 0.5]
X, labels_true = make_var_density_blobs(n_samples=750,
centers=centers,
cluster_std=densities,
random_state=0)
X = StandardScaler().fit_transform(X)
这个数据集有三个簇,分别位于(1,1)、(-1,-1)和(1,-1),且每个簇具有不同的密度(标准差分别为0.2、0.35和0.5)。
算法实现
我们分别使用HDBSCAN和DBSCAN进行聚类:
# HDBSCAN实现
hdb = HDBSCAN(min_cluster_size=10).fit(X)
hdb_labels = hdb.labels_
# DBSCAN实现
db = DBSCAN(eps=0.1).fit(X)
db_labels = db.labels_
注意HDBSCAN只需要指定min_cluster_size参数,而DBSCAN需要手动设置eps参数。
结果分析与对比
聚类质量评估
我们使用多种指标评估聚类效果:
- 同质性(Homogeneity): 每个簇只包含单个类的成员
- 完整性(Completeness): 给定类的所有成员都分配给同一个簇
- V-measure: 同质性和完整性的调和平均
- 调整兰德指数(Adjusted Rand Index): 衡量两个聚类结果相似度
- 调整互信息(Adjusted Mutual Information): 考虑信息量的相似度度量
- 轮廓系数(Silhouette Coefficient): 衡量样本与自身簇和其他簇的距离
实验结果
HDBSCAN结果:
- 估计簇数量:3
- 聚类时间:0.004s
- 同质性:0.999
- 完整性:0.999
- V-measure:0.999
- 调整兰德指数:0.999
- 调整互信息:0.999
- 轮廓系数:0.513
DBSCAN结果:
- 估计簇数量:1
- 聚类时间:0.001s
- 同质性:0.000
- 完整性:1.000
- V-measure:0.000
- 调整兰德指数:0.000
- 调整互信息:0.000
- 轮廓系数:NaN(簇太少)
结果可视化
通过matplotlib绘制两种算法的聚类结果:
hdb_axis.plot(X[hdb_labels == k, 0], X[hdb_labels == k, 1], 'o',
markerfacecolor=col, markeredgecolor='k', markersize=6)
从可视化结果可以明显看出,HDBSCAN成功识别了所有三个不同密度的簇,而DBSCAN由于固定密度阈值,只能识别出最密集的簇。
技术要点解析
-
密度变化处理能力:HDBSCAN通过构建层次树,能够自动适应不同密度,而DBSCAN需要手动调整参数。
-
参数敏感性:HDBSCAN对min_cluster_size参数相对鲁棒,而DBSCAN对eps参数非常敏感。
-
噪声处理:两种算法都能识别噪声点(标记为-1),但HDBSCAN通常能更准确地识别真正的噪声。
-
计算效率:虽然HDBSCAN计算时间稍长,但其结果质量显著优于DBSCAN。
实际应用建议
-
当数据集中存在不同密度的簇时,优先考虑HDBSCAN。
-
对于大规模数据集,可以先使用HDBSCAN确定簇的数量和结构,再使用其他方法进行优化。
-
在参数选择上,min_cluster_size通常设置为数据集中最小期望簇的大小。
-
可以通过调整HDBSCAN的cluster_selection_method参数('eom'或'leaf')来改变簇选择策略。
总结
通过本实验我们可以清晰地看到HDBSCAN在处理变密度数据集上的优势。它不需要预先指定密度阈值,能够自动发现不同密度的簇,且聚类质量显著优于传统DBSCAN。对于实际应用中的复杂数据集,HDBSCAN通常是更好的选择。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考