层次聚类与密度聚类方法全面解析
时间:2026-07-17 | 作者:清风无痕 | 阅读:0聚类是一种典型的无监督学习方法。其目标是在没有标签信息的情况下,将数据样本按照相似性划分为若干簇。同一簇内的样本相似度高,不同簇之间差异显著。常见方法包括基于划分的K-Means、基于层次的层次聚类,以及基于密度的DBSCAN、OPTICS等。聚类广泛应用于用户分群、市场细分、文本主题发现、图像分割等任务,是数据挖掘和探索性分析中的重要工具。
什么是层次聚类
层次聚类是一种常见且直观的聚类方法。它属于无监督学习,应用场景包括文本主题发现、基因表达模式识别、社会网络群体结构挖掘、图像处理和市场细分等。
与K-Means等划分式方法不同,层次聚类通过构建样本间的层次关系,形成一棵聚类树(dendrogram)。这棵树能帮助我们理解数据的多层次结构。
核心思想
- 自底向上(凝聚型,Agglomerative):初始时每个样本视为一个簇,逐步将最相似的簇合并,直到最终形成一个簇或达到设定的簇数。
- 自顶向下(分裂型,Divisive):初始时所有样本视为一个整体簇,逐步分裂为更小的簇,直至达到指定的簇数。
常用的是凝聚型层次聚类,因为其计算效率更高且直观。
簇间距离度量
层次聚类依赖于簇间的距离定义。不同的度量方式会影响结果:
- 单链法(Single Linkage):簇间最短距离。容易出现“链式效应”。
- 全链法(Complete Linkage):簇间最长距离。倾向于得到紧凑的簇。
- 平均链法(Average Linkage):簇间平均距离。综合了单链与全链的特点。
- Ward 方法:基于平方误差最小化,倾向于生成方差较小、大小相对均衡的簇。
凝聚型层次聚类的工作步骤
- 将每个样本作为一个独立簇。
- 计算所有簇之间的距离。
- 找到最近的两个簇并合并。
- 更新簇间距离矩阵。
- 重复步骤2-4,直到所有样本被合并为一个簇或达到预设簇数。
是不是有点像二分法或者归并排序?
最终结果可以用树状图(dendrogram)直观展示,每个分支的高度代表簇之间的距离。
下面用一段代码形象地理解一下:
from sklearn.datasets import load_iris
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
# 1. 加载数据
iris = load_iris()
X = iris.data
# 2. 层次聚类 (AgglomerativeClustering)
model = AgglomerativeClustering(n_clusters=3, linkage='ward')
labels = model.fit_predict(X)
print("聚类结果:", labels[:20])
# 3. 绘制树状图
Z = linkage(X, method='ward')
plt.figure(figsize=(8, 5))
dendrogram(Z, truncate_mode='level', p=3)
plt.title("Hierarchical Clustering Dendrogram")
plt.xlabel("Sample Index")
plt.ylabel("Distance")
plt.show()
输出结果如下:
简单解释一下:第一次聚类时,第7个样本和第8个样本距离最近,它们就组成一个组合。组合之间再进行聚类,最后就聚成了目标类别。
层次聚类的优势在于无需预先指定簇数,能够揭示数据的多层次结构,且结果可视化直观。但其缺点是计算复杂度较高,难以扩展到超大规模数据集,同时对噪声与异常值敏感。在小规模数据分析、模式探索和数据可视化场景中,层次聚类依然是一种非常有价值的方法。
密度聚类方法
密度聚类方法通过寻找数据空间中高密度区域来划分簇。它能自然地处理噪声和非凸形簇结构,这是传统划分式方法(如K-Means)难以解决的问题。我们出去玩在地图中搜索美食,这些热点区域或者人口事件聚集区,都是通过密度聚类方法实现的。
DBSCAN和OPTICS是两种典型的密度聚类方法。
1. DBSCAN
DBSCAN的核心思想是:簇是由密度可达的点组成的区域,而低密度区域视为噪声。
- 核心概念:
- ε-邻域:样本点周围半径为ε的区域。
- 核心点:其ε-邻域内点数 ≥ minPts。
- 边界点:位于核心点ε-邻域内,但本身点数 < minPts。
- 噪声点:不属于任何簇的点。
- 聚类规则:
- 从任意未访问点开始,若其为核心点,则以该点为中心扩展簇,将密度可达的点加入簇。
- 对簇中新增的核心点重复扩展过程,直到簇无法再扩展。
- 重复以上步骤,直到所有点都被访问过。
DBSCAN可以发现任意形状的簇,能自动识别噪声点,并且无需预设簇数。但是它对参数ε和minPts比较敏感,同时在高维数据中效果会有所下降,因为高维数据中密度概念就失效了。
2. OPTICS
OPTICS是DBSCAN的改进,主要解决DBSCAN在参数选择(尤其是ε)上的限制。
- 核心思想:不直接生成簇,而是生成可达距离序列(reachability distance),记录点之间的密度结构。
- 聚类规则:
- 对每个点计算核心距离(core distance)和可达距离(reachability distance)。
- 按可达距离顺序访问所有点,形成一个有序列表。
- 可通过可达距离的突变检测不同密度区域,从而识别簇。
OPTICS能发现不同密度的簇,并且不需要严格指定ε值,适合数据密度不均匀的场景。但是计算复杂度比DBSCAN高,结果需要进一步分析才能确定簇边界。
下面用代码展示一下这两种方法的效果对比:
from sklearn.datasets import make_moons
from sklearn.cluster import DBSCAN
from sklearn.cluster import OPTICS
import matplotlib.pyplot as plt
# 生成非凸形数据
X, y = make_moons(n_samples=300, noise=0.05, random_state=42)
# DBSCAN 聚类
dbscan = DBSCAN(eps=0.2, min_samples=5)
labels_dbscan = dbscan.fit_predict(X)
# OPTICS 聚类
optics = OPTICS(min_samples=5, xi=0.05, min_cluster_size=0.1)
labels_optics = optics.fit_predict(X)
# 可视化 DBSCAN
plt.figure(figsize=(12,5))
plt.subplot(1,2,1)
plt.scatter(X[:,0], X[:,1], c=labels_dbscan, cmap='viridis', s=30)
plt.title("DBSCAN Clustering")
# 可视化 OPTICS
plt.subplot(1,2,2)
plt.scatter(X[:,0], X[:,1], c=labels_optics, cmap='viridis', s=30)
plt.title("OPTICS Clustering")
plt.show()
运行结果如下,可以看到DBSCAN和OPTICS都能识别非凸簇,OPTICS对不同密度簇表现更稳健。
总结时刻到,DBSCAN和OPTICS是密度聚类的代表方法:
- DBSCAN简单高效,适合簇密度均匀、噪声点明确的数据。
- OPTICS解决了DBSCAN对参数敏感的问题,能处理不同密度的簇,但计算复杂度更高。
总体来说,密度聚类方法在非球形簇、异常点检测和探索性数据分析中具有明显优势,是传统划分聚类方法的重要补充。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 阴阳师御魂技能学习方法详解
- 时间:2026-07-26
-
- 旷视多模态上下文学习新方法入选ICML 2026
- 时间:2026-07-18
-
- 搜狗五笔字根的高效记忆与快速学习方法
- 时间:2026-06-30
-
- 吉他五线谱入门指南快速学会识谱技巧
- 时间:2026-05-23
-
- 傻瓜英语APP乱序功能设置方法详解
- 时间:2026-05-23
-
- 高考成绩被屏蔽女孩坚信不存在智商差距 网友热议
- 时间:2025-06-26
精选合集
更多大家都在玩
大家都在看
更多-
- 蚂蚁新村小课堂今日答案9月25日 福建土楼营造技艺中主要用什么作为墙体材料
- 时间:2026-09-25
-
- 蚂蚁新村2026年9月25日答案最新
- 时间:2026-09-25
-
- 蚂蚁庄园答案2026年9月26日
- 时间:2026-09-25
-
- 蚂蚁庄园今天答题答案2026年9月26日
- 时间:2026-09-25
-
- 今日小鸡庄园答案2026.9.26
- 时间:2026-09-25
-
- 蚂蚁庄园今日答案2026年9月26日
- 时间:2026-09-25
-
- 橡皮擦能擦掉铅笔字迹的原理是什么 蚂蚁庄园今日答案9.26
- 时间:2026-09-25
-
- 小鸡答题今天的答案是什么2026年9月26日
- 时间:2026-09-25