大家好!在这篇文章中,我将向你展示如何在R中进行层次聚类。
什么是分层聚类?
分层聚类是一种可供选择的方法,它可以自下而上地构建层次结构,并且不需要我们事先指定聚类的数量。
该算法的工作原理如下:
将每个数据点放入其自己的群集中。
确定最近的两个群集并将它们组合成一个群集。
重复上述步骤,直到所有数据点位于一个群集中。
一旦完成,它通常由树状结构表示。
让我们看看分层聚类算法可以做得多好。我们可以使用hclust这个。hclust要求我们以距离矩阵的形式提供数据。我们可以通过使用dist。默认情况下,使用完整的链接方法。
这会生成以下树形图:
从图中我们可以看出,群集总数的最佳选择是3或4:
要做到这一点,我们可以使用所需数量的群集来切断树cutree。
现在,让我们将它与原始物种进行比较。
它看起来像算法成功地将物种setosa的所有花分为簇1,并将virginica分为簇2,但是与花斑杂交有困难。如果你看看显示不同物种的原始图,你可以理解为什么:
让我们看看我们是否可以通过使用不同的连接方法更好。这一次,我们将使用平均连接方法:
这给了我们以下树状图:
我们可以看到,群集数量的两个最佳选择是3或5.让我们用cutree它来将它降到3个群集。
我们可以看到,这一次,该算法在聚类数据方面做得更好,只有6个数据点出错。
我们可以如下绘制它与原始数据进行比较:
这给了我们下面的图表:
内部颜色与外部颜色不匹配的所有点都是不正确聚类的点。
mlr3 book
参考: 浅谈K-means聚类算法
【机器学习】K-means
R语言面向对象之R6 class
R6可变类:初始化 = ,复制$clone(),嵌套(deep = TRUE)
R语言绘制二元聚类图说明
之前使用k均值方法将数据划分到不同的簇中,但当变量个数大于2时,就无法在二维空间中展示数据聚类的过程,因此可以使用二元聚类图先将变量减少成两个主要成分,然后利用组件(诸如轴线和椭圆)来展示数据聚类的结果。
操作
载入包,绘制二元聚类图
library("cluster")
clusplot(customer,fit$cluster,color = TRUE,shade = TRUE)
二元聚类图
对二元聚类图进行标记并放大:
par(mfrow = c(1,2))
clusplot(customer,fit$cluster,color = TRUE,shade = TRUE)
rect(-0.7,-1.7,2.2,-1.2,border = "orange",lwd = 2)
clusplot(customer,fit$cluster,color = TRUE,xlim = c(-0.7,2.2),ylim =c(-1.7,-1.2))
原理
本节绘制了一个二元聚类图以展示数据聚类的过程,我们首先安装和导入cluster算法包,然后使用clusplot函数绘制customer数据集的二元聚类图,clusplot函数的shade和color参数值均被设置成TRUE,得到一个彩色且带边框的聚类。 在得到的结果图中,可以得知二元聚类使用了两个成分,x轴与y轴涵盖了85.01%的数据点,数据点根据成分1和成分2的取值散落在图中,同一簇内的数据点采用相同的颜色和形状绘制。
我们还使用了rect函数来增加一个矩形框对给定x轴和y轴内的簇进行特别标注,然后调用clusplot函数,设置好xlim与ylim参数的值,将被选中的簇放大到显示以便不好的观测簇内数据点的特征。