在数据分析和机器学习领域,聚类分析是一种重要的无监督学习技术,它能够将数据集中相似的数据点归为同一类。层次聚类作为聚类分析中的一种经典方法,具有独特的优势和广泛的应用场景。本文将详细介绍层次聚类的方法原理、应用实例,并提供相应的 R 语言演示代码。
层次聚类是一种基于数据点之间的相似度,逐步构建聚类层次结构的方法。它可以分为凝聚式(自底向上)和分裂式(自顶向下)两种类型。
凝聚式层次聚类从每个数据点作为一个单独的类开始,然后根据数据点之间的相似度,逐步合并相似的类,直到所有的数据点都属于同一个类为止。合并的过程可以用树形图( dendrogram )来表示。
分裂式层次聚类则相反,它从所有数据点都属于同一个类开始,然后根据数据点之间的差异,逐步将大类分裂成小类,直到每个数据点都成为一个单独的类。
在层次聚类中,常用的距离度量方法有欧氏距离、曼哈顿距离、切比雪夫距离等。以欧氏距离为例,对于两个数据点 $x=(x1,x_2,\cdots,x_n)$ 和 $y=(y_1,y_2,\cdots,y_n)$,它们之间的欧氏距离 $d(x,y)$ 定义为:
[d(x,y)=\sqrt{\sum{i = 1}^{n}(x_i - y_i)^2}]
在凝聚式层次聚类中,合并准则决定了哪些类应该被合并。常用的合并准则有单链接(Single Linkage)、全链接(Complete Linkage)、平均链接(Average Linkage)等。
我们使用 R 语言内置的 iris
数据集进行演示。该数据集包含了 150 个鸢尾花样本,每个样本有 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),以及对应的鸢尾花种类。
# 加载数据集
data(iris)
# 提取特征数据
iris_features <- iris[, 1:4]
使用 dist()
函数计算数据点之间的欧氏距离矩阵。
# 计算欧氏距离矩阵
distance_matrix <- dist(iris_features, method = "euclidean")
使用 hclust()
函数进行凝聚式层次聚类,这里我们选择平均链接作为合并准则。
# 进行层次聚类
hc <- hclust(distance_matrix, method = "average")
使用 plot()
函数绘制层次聚类的树形图。
# 绘制树形图
plot(hc, main = "Hierarchical Clustering Dendrogram", xlab = "Iris Samples", ylab = "Distance")
使用 cutree()
函数切割树形图,得到指定数量的聚类结果。
# 切割树形图,得到 3 个聚类
clusters <- cutree(hc, k = 3)
# 查看聚类结果
table(clusters, iris$Species)
层次聚类在许多领域都有广泛的应用,下面介绍几个常见的应用场景。
在市场营销中,层次聚类可以用于将消费者根据其购买行为、偏好等特征进行分类,从而实现市场细分。例如,通过对消费者的购买金额、购买频率、购买品类等数据进行层次聚类,可以将消费者分为高价值客户、中等价值客户和低价值客户,以便企业制定不同的营销策略。
在生物学中,层次聚类可以用于对生物物种进行分类。例如,根据生物的形态特征、基因序列等数据进行层次聚类,可以构建生物的分类树,帮助科学家更好地理解生物的进化关系。
在计算机视觉中,层次聚类可以用于图像分割。例如,将图像中的像素点根据其颜色、亮度等特征进行层次聚类,将相似的像素点归为同一类,从而实现图像的分割。
项目 | 详情 |
---|---|
聚类类型 | 凝聚式(自底向上)、分裂式(自顶向下) |
距离度量 | 欧氏距离、曼哈顿距离、切比雪夫距离等 |
合并准则 | 单链接、全链接、平均链接等 |
优点 | 无需预先指定聚类数量、可视化效果好、适用于各种数据类型 |
缺点 | 计算复杂度高、操作不可逆 |
层次聚类是一种强大的聚类分析方法,它通过构建聚类的层次结构,能够帮助我们更好地理解数据的内在结构。在实际应用中,我们可以根据数据的特点和需求选择合适的距离度量和合并准则。同时,我们也需要注意层次聚类的优缺点,合理使用该方法。通过本文的介绍和 R 语言演示代码,希望读者能够对层次聚类有更深入的理解,并能够将其应用到实际的数据分析项目中。