【AI概念】朴素聚类方法:层次聚类(Hierarchical Clustering)与密度聚类(Density-Based Clustering)有什么区别?算法流程数学推导、典型代码可视化、应用建议

大家好,我是爱酱。本篇将会系统讲解朴素聚类方法中的两大经典代表:层次聚类(Hierarchical Clustering)密度聚类(Density-Based Clustering, 以DBSCAN为例)。内容包括基本原理、算法流程、数学表达、实际案例和工程应用,适合初学者和进阶读者。

注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力!


一、聚类是什么?

聚类(Clustering)是无监督学习中的一种基础任务,目标是将数据集中的样本按照相似性自动分组,使得同一组内的样本相似度高,不同组间的样本差异大。聚类广泛应用于数据探索、客户分群、图像分析、异常检测等领域。


二、层次聚类(Hierarchical Clustering)

1. 基本思想

层次聚类是一种通过构建“层级结构”来分组数据的无监督聚类方法。其核心思想是根据样本间的距离或相似度,逐步合并或分裂样本,最终形成一棵聚类树(dendrogram)

  • 凝聚型(自底向上,Agglomerative):每个样本初始为一个单独的簇,逐步合并最近的两个簇,直到所有样本合并为一个簇或达到预设簇数。

  • 分裂型(自顶向下,Divisive):所有样本初始为一个大簇,逐步将簇拆分为更小的子簇,直到每个样本单独成簇或达到预设簇数。

2. 距离度量与合并准则

  • 常用距离度量:欧氏距离、曼哈顿距离、余弦相似度等。

  • 合并/分裂准则(Linkage):

    • 最短距离(Single Linkage):两簇最近点的距离。

    • 最长距离(Complete Linkage):两簇最远点的距离。

    • 平均距离(Average Linkage):两簇所有点对的平均距离。

    • 中心距离(Centroid Linkage):簇中心之间的距离。

3. 算法流程(以凝聚型为例)

  1. 计算所有样本对之间的距离,初始化每个样本为一个簇。

  2. 找到距离最近的两个簇,合并为新簇。

  3. 更新距离矩阵(根据选定的linkage方式)。

  4. 重复步骤2-3,直到只剩一个簇或达到指定簇数。

4. 数学表达

假设有$n$个样本,距离矩阵为$D$,每次合并距离最小的两个簇$C_i, C_j$

(C_i, C_j) = \arg\min_{(C_p, C_q)} d(C_p, C_q)

其中$d(C_p, C_q)$为两簇间的距离,根据不同linkage方式有不同计算公式。

5. 结果展示

  • 层次聚类结果通常用树状图(dendrogram)展示,直观反映聚类过程和层级关系。


三、密度聚类(Density-Based Clustering, 以DBSCAN为例)

1. 基本思想

密度聚类以DBSCAN(Density-Based Spatial Clustering of Applications with Noise)为代表,通过数据点的“密度”来定义簇。核心思想是:簇是数据空间中密度较高的区域,簇之间被密度较低的区域分隔

2. 关键概念

  • 核心点(Core Point):以该点为中心、半径$\epsilon$的邻域内,至少包含MinPts个点。

  • 边界点(Border Point):本身邻域内点数不足MinPts,但在某个核心点的邻域内。

  • 噪声点(Noise/Outlier):既不是核心点,也不是任何核心点邻域内的边界点。

3. 算法流程

  1. 对每个未访问点,查找其$\epsilon$邻域内的所有点。

  2. 如果邻域点数$\geq$ MinPts,将该点标为核心点,创建新簇。

  3. 递归将邻域内所有密度可达的点加入同一簇。

  4. 对剩余未分配的点重复上述过程。

  5. 未能归入任何簇的点视为噪声。

4. 数学表达

  • $\epsilon$-邻域

    N_\epsilon(x) = \{y \mid d(x, y) \leq \epsilon\}

  • 核心点判定

    |N_\epsilon(x)| \geq \text{MinPts}

爱酱也单独发过密度聚类(DBSCAN)的文章介绍,内容非常深入,并包含大量代码演示跟范例,欢迎大家去看看,加深对这个算法的了解!
传送门——

【AI深究】密度聚类(DBSCAN)全网最详细全流程详解与案例(附Python代码演示)| 数学定义与公式 | DBSCAN算法 | 实际案例与流程 | 代码实现 | 优、缺点分析_dbscan算法l流程图代码-优快云博客


四、层次聚类与密度聚类的代码实现与可视化

1. 层次聚类(Hierarchical Clustering)代码示例

import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster

# 生成二维数据
np.random.seed(0)
X = np.vstack([
    np.random.normal(loc=[2, 2], scale=0.4, size=(30, 2)),
    np.random.normal(loc=[6, 6], scale=0.4, size=(30, 2)),
    np.random.normal(loc=[2, 6], scale=0.4, size=(30, 2))
])

# 层次聚类(凝聚型,平均距离)
Z = linkage(X, method='average')
# 绘制树状图
plt.figure(figsize=(10, 5))
dendrogram(Z)
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Sample Index')
plt.ylabel('Distance')
plt.show()

# 指定聚类数,划分簇
clusters = fcluster(Z, t=3, criterion='maxclust')
plt.figure(figsize=(6, 6))
plt.scatter(X[:, 0], X[:, 1], c=clusters, cmap='rainbow', s=50)
plt.title('Hierarchical Clustering Result')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

代码说明:

  • scipy.cluster.hierarchy实现凝聚型层次聚类,linkage方法可选'average'(平均距离)、'single'(最短距离)、'complete'(最长距离)等。

  • dendrogram绘制树状图,展示聚类层级关系。

  • fcluster指定聚类数,得到每个点的簇标签,散点图直观显示聚类效果。


 2. 密度聚类(DBSCAN)代码示例

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN

# 生成二维数据(含噪声)
np.random.seed(0)
X = np.vstack([
    np.random.normal(loc=[2, 2], scale=0.3, size=(30, 2)),
    np.random.normal(loc=[6, 6], scale=0.3, size=(30, 2)),
    np.random.normal(loc=[4, 4], scale=0.8, size=(40, 2))
])

# DBSCAN聚类
db = DBSCAN(eps=0.5, min_samples=5)
labels = db.fit_predict(X)

# 可视化聚类结果
plt.figure(figsize=(6, 6))
unique_labels = set(labels)
colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels))]
for k, col in zip(unique_labels, colors):
    class_member_mask = (labels == k)
    xy = X[class_member_mask]
    if k == -1:
        # 噪声点
        plt.scatter(xy[:, 0], xy[:, 1], c=[col], marker='x', s=80, label='Noise')
    else:
        plt.scatter(xy[:, 0], xy[:, 1], c=[col], marker='o', s=50, label=f'Cluster {k+1}')
plt.title('DBSCAN Clustering Result')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()

代码说明:

  • sklearn.cluster.DBSCAN实现密度聚类,设置邻域半径eps和最小点数min_samples

  • labels=-1表示噪声点,其余为不同簇。

  • 可视化显示不同簇和噪声点,体现DBSCAN对异常点的识别能力。


五、优缺点与工程应用建议

层次聚类

优点:

  • 不需预先指定簇数(可根据树状图后期裁剪)。

  • 能反映数据的层级结构。

  • 适合小样本、结构清晰的数据。

缺点:

  • 计算复杂度高,难以扩展到大规模数据。

  • 对噪声和离群点敏感。

  • 聚类结果不可逆,合并/分裂后无法回退。

应用建议:

  • 常用于生物信息学(如基因表达分析)、文档归类、市场细分等领域。

  • 适合探索性分析和可视化数据结构。


密度聚类(DBSCAN)

优点:

  • 能发现任意形状的簇。

  • 自动识别噪声点,无需预设簇数。

  • 对异常值鲁棒。

缺点:

  • 对参数epsmin_samples敏感,参数选择需结合数据分布。

  • 在高维数据或密度变化大的数据上效果有限。

应用建议:

  • 适合空间数据聚类、异常检测、图像分割等任务。

  • 常用于地理信息分析、社交网络分析等领域。


六、总结

层次聚类和密度聚类是无监督学习中两类经典的朴素聚类方法。层次聚类通过递归合并或分裂样本,构建数据的层级结构,适用于小规模、结构清晰的数据分析与可视化。密度聚类以DBSCAN为代表,能发现任意形状的簇并自动识别噪声,适合空间分布复杂、含异常点的数据场景。理解这两类聚类方法的原理、优缺点和工程应用,有助于在实际项目中灵活选择合适的聚类策略。


谢谢你看到这里,你们的每个赞、收藏跟转发都是我继续分享的动力

如需进一步案例、代码实现或与其他聚类算法对比,欢迎留言交流!我是爱酱,我们下次再见,谢谢收看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值