R编程中的层次聚类是什么?
介绍
在数据分析和机器学习的广阔领域中,层次聚类是一种强大的技术,它根据个体或对象的相似性对它们进行分组。当结合R编程语言的多功能性和效率时,它成为一个更有价值的工具,用于揭示大型数据集中的隐藏模式和结构。在本文中,我们将探讨层次聚类的内容,深入研究其各种类型,并通过一个实际示例进行说明,并在R中提供代码实现。
层次聚类
层次聚类是一种无监督学习算法,它旨在通过基于预定距离度量迭代合并或划分相似实体来创建聚类。与k均值聚类等其他方法不同,在k均值聚类中,我们需要预先定义所需聚类的数量,层次聚类构建一个称为树状图的树状结构,可以将其切割到一定高度以获得多个聚类解决方案。
层次聚类的类型
层次聚类主要有两种方法:
凝聚的(自下而上):此方法首先将每个人都视为其自身的聚类,然后连续合并小的聚类,直到达到包含所有数据点的单个大型聚类。连接准则的选择在这里起着至关重要的作用。
分裂的(自上而下):与凝聚方法相反;分裂层次聚类从包含所有数据点的单个大型聚类开始,然后递归地将其划分为较小的子聚类,直到达到单个观察值作为单独的聚类。
使用R编程实现层次聚类
层次聚类是通过使用曼哈顿距离计算距离来实现的。
算法
步骤1:首先,我们需要加载样本数据集。
步骤2:在聚类之前,需要进行数据预处理。如果存在缺失值,我们可能需要标准化变量或处理缺失值。
步骤3:根据所选度量(例如欧几里德距离或曼哈顿距离)计算观测值之间的差异距离或距离。
步骤4:创建层次聚类,我们的距离矩阵准备就绪后,我们可以使用R中的`hclust()`函数进行层次聚类。
步骤5:生成的“hc”对象存储后续步骤所需的所有信息。
步骤6:绘制树状图,我们可以通过在R中绘制树状图来可视化我们的聚类。
示例
library(cluster) # Create a sample dataset set.seed(123) x <- matrix(rnorm(100), ncol = 5) # Finding distance matrix distance_mat <- dist(x, method = 'manhattan') distance_mat # Fitting Hierarchical Clustering Model # to the training dataset set.seed(240) # Setting seed Hierar_cl <- hclust(distance_mat, method = "average") Hierar_cl # Plotting dendrogram plot(Hierar_cl) # Choosing no. of clusters # Cutting tree by height abline(h = 5.5, col = "green") # Cutting tree by no. of clusters fit <- cutree(Hierar_cl, k = 3 ) fit table(fit) rect.hclust(Hierar_cl, k = 11, border = "red")
输出
1 2 3 4 5 6 7 8
2 2.928416
3 3.820964 4.579451
4 5.870407 3.963824 6.920070
5 4.712898 3.357644 5.192501 2.041704
6 3.724940 5.188503 2.298511 7.529122 6.906090
7 4.378470 3.603915 6.073011 6.448175 6.242628 5.408591
8 2.909887 2.270199 5.993941 6.134220 5.627842 5.830570 3.531025
9 2.545686 4.500523 5.703258 5.466749 3.856739 6.130000 6.203371 4.746715
10 5.861279 5.127758 9.368977 8.324293 8.236305 8.704556 3.295965 5.013834
11 6.085281 3.179450 4.827798 5.101238 4.895692 5.436850 2.873268 4.584566
12 5.590643 2.816420 6.061696 4.307201 3.803264 6.670747 4.914120 4.986817
13 4.435100 3.563707 6.249931 6.596065 5.579229 5.771611 1.893134 3.980554
14 6.402935 4.233552 6.619402 4.029210 2.452428 8.633337 5.044223 5.761055
15 4.785512 2.544131 7.087874 5.618391 5.530404 7.696926 2.610109 3.284796
16 7.566986 7.161528 6.313095 7.075204 5.756949 6.740845 5.668959 7.578376
17 6.380095 4.860359 5.530564 7.704619 7.499072 6.327322 3.290148 5.335482
18 6.818578 4.550758 9.130209 5.378824 5.184404 9.739261 6.419430 4.339261
19 3.282054 2.655900 3.616115 5.178834 3.243561 4.331110 3.510374 3.815444
20 3.236401 2.604102 5.008448 5.395216 3.577502 6.633752 5.481153 3.662209
9 10 11 12 13 14 15 16
2
3
4
5
6
7
8
9
10 6.099033
11 6.734916 5.530202
12 6.804009 7.368849 4.130914
13 4.591857 3.200043 3.839703 4.870051
14 5.335886 6.919997 4.519932 5.595756 4.300131
15 6.393326 3.634753 3.218255 4.662948 4.028726 4.327200
16 5.414681 7.171170 5.198525 8.439225 4.010792 3.776011 7.892429
17 8.925781 6.482177 4.055843 6.170564 5.183282 6.868406 3.874253 8.586946
18 6.552868 7.159270 5.279163 5.245416 7.472245 6.473367 3.809321 9.815098
19 3.707689 6.167308 3.286156 3.779404 2.967265 4.302227 5.200031 4.681604
20 3.297399 6.324931 4.913250 4.907588 4.817754 3.963564 4.663005 6.219969
17 18 19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 6.804331
19 5.625103 6.543116
20 7.029360 5.821915 2.451658
Call:
hclust(d = distance_mat, method = "average")
Cluster method : average
Distance : manhattan
Number of objects: 20
[1] 1 1 2 1 1 2 1 1 1 1 1 1 1 1 1 3 2 1 1 1
fit
1 2 3
16 3 1
结论
层次聚类是一种多功能且强大的技术,用于发现数据集中的潜在结构。通过利用其实际应用并在R编程语言中实现它,我们现在已经获得了对层次聚类的理解和实践经验。这种方法在客户细分、图像分析和生物信息学等各个领域具有巨大的潜力,帮助专家揭示隐藏的模式,从而推动明智的决策过程。
数据结构
网络
关系型数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP