Hierarchical Cluster 层次聚类

本文详细介绍了层次聚类分析的概念及其在R语言中的应用,通过构造数据集并进行距离计算,最终利用hclust函数进行聚类,并展示如何将聚类结果可视化。此外,还提供了实例代码及结果解释,帮助读者掌握层次聚类的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

R: Hierarchical Cluster 层次聚类

发表于2年前(2014-10-05 12:05)   阅读( 1884) | 评论( 0)  0人收藏此文章, 我要收藏
0

构造数据:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
> dataset = matrix(c(1,2,
+ 1.2,2,
+ 8,9,
+ 0.9,1.8,
+ 7,10,
+ 8.8,9.2), nrow=6, byrow=T)
> dataset
      [,1] [,2]
[1,]  1.0  2.0
[2,]  1.2  2.0
[3,]  8.0  9.0
[4,]  0.9  1.8
[5,]  7.0 10.0
[6,]  8.8  9.2


聚类:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
> d = dist(dataset)
> d
            1          2          3          4          5
2  0.2000000                                           
3  9.8994949  9.7590983                                
4  0.2236068  0.3605551 10.1118742                     
5 10.0000000  9.8812955  1.4142136 10.2200783          
6 10.6150836 10.4690019  0.8246211 10.8245092  1.9697716
> hclust(d, method = "complete" )
 
Call:
hclust(d = d, method = "complete" )
 
Cluster method   : complete
Distance         : euclidean
Number of objects: 6
 
> hc = hclust(d, method = "complete" )
> plot(hc)




分成两个簇:

?
1
2
3
> democut<-cutree(hc,k=2)
> democut
[1] 1 1 2 1 2 2

参考:

http://www.r-tutor.com/gpu-computing/clustering/hierarchical-cluster-analysis
http://stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html
http://ecology.msu.montana.edu/labdsv/R/labs/lab13/lab13.html

### 层次聚类 (Hierarchical Clustering) #### 算法原理 层次聚类是一种不需预先设定簇数量的聚类方法,能够构建一个描述数据集内部结构的树形图(也称为树状图)。该算法主要分为两种形式:凝聚型(自底向上)和分裂型(自顶向下),其中最常见的是凝聚型层次聚类。在这一过程中,最初每个样本都被视为独立的一簇,在每一步迭代中,最近邻的两个簇会被合并成一个新的较大簇,直到满足特定停止条件为止[^3]。 对于距离度量的选择至关重要,常见的有欧氏距离、曼哈顿距离等;而链接准则决定了如何计算新形成的簇与其他现有簇之间的相似程度,常用的包括单链法则、全链法则以及平均链法则等[^2]。 #### 实现方式 利用 `scipy.cluster.hierarchy` 模块下的函数可以方便地完成层次聚类操作: 1. 使用 `linkage()` 函数执行层次聚类过程并返回Z矩阵; 2. 利用 `fcluster()` 函数基于给定阈值从Z矩阵提取最终分类标签; 3. 借助 `dendrogram()` 绘制出代表整个分层关系的树状图以便于可视化分析。 以下是采用 Python 和 SciPy 库实现简单例子的代码片段: ```python from scipy.cluster.hierarchy import linkage, fcluster, dendrogram import matplotlib.pyplot as plt # 计算样品间的距离,并进行层次聚类 Z = linkage(samples, 'ward') # 提取类别标签 labels = fcluster(Z, t=threshold_value, criterion='distance') # 可视化展示结果 plt.figure(figsize=(8, 6)) dendrogram(Z) plt.show() ``` 此外,还可以借助 scikit-learn 的 AgglomerativeClustering 类来简化上述流程,只需调整参数即可轻松切换不同的连接策略或设置预期的最大簇数目[^4]。 #### 应用场景 层次聚类因其无需预设k值的特点而在许多领域得到广泛应用,特别是在探索性数据分析阶段尤为有用。具体来说,它适合处理那些难以事先估计合理簇数目的情况,比如基因表达谱研究、文档检索系统优化、社交网络社区发现等领域。另外,由于其产生的树状图能清晰展现各级别的群组构成状况,因此也被广泛应用于生物学进化树重建等方面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值