R语言 如何使用R编程进行分层聚类分析
聚类分析 或聚类是一种在数据集中寻找数据点子群的技术。属于同一子组的数据点具有相似的特征或属性。聚类是一种无监督的机器学习方法,具有广泛的应用,如市场研究、模式识别、推荐系统等。最常用的聚类算法是K-means聚类和层次聚类分析。在这篇文章中,我们将了解层次聚类分析和它在R编程中的实现。
层次聚类分析 (也被称为层次聚类)是一种聚类技术,其中的聚类具有层次性或预定的顺序。层次聚类可以用树状结构表示,称为 树状图。 有两种类型的分层聚类。
- 聚合式层次 聚类:这是一种自下而上的方法,每个数据点都在自己的聚类中开始,随着层次的上升,相似的聚类对被合并起来。
- 分裂式层次聚类 :这是一种自上而下的方法,所有的数据点都从一个聚类开始,随着层次结构的向下移动,聚类被递归地分割。
为了衡量一对数据点之间的相似性或不相似性,我们使用距离测量(欧氏距离、曼哈顿距离等)。然而,为了找到两组观察值之间的不相似性,我们使用聚类方法。最常见的聚类方法是。
- 完全联系聚类 :它计算两个聚类中观测值之间的所有成对异同,并将两点之间最长(最大)的距离视为两个聚类之间的距离。
- 单一联系聚类 :它计算两个聚类中的观测值之间的所有成对异同,并将最短(最小)的距离视为两个聚类之间的距离。
- 平均联系聚类 :它计算两个聚类中的观测值之间的所有成对的不相似性,并将平均距离作为两个聚类之间的距离。
使用R 执行 层次聚类分析
对于在R中计算层次聚类,常用的函数如下。
- 统计包中的 hclust 和cluster包中的 agnes 用于聚类层次聚类。
- cluster包中的 diana 用于划分层次聚类。
在我们的实现中,我们将使用数据包中的鸢尾花数据集。我们将使用萼片宽度、萼片长度、花瓣宽度和花瓣长度列作为我们的数据点。首先,我们加载并归一化数据。然后用 dist 函数计算异同值,并将这些值送入聚类函数以进行分层聚类。
聚合分层聚类的实现
获得的异质性矩阵被送入 hclust . hclust 的方法参数指定了要使用的聚类方法(即完全、平均、单一)。然后我们可以绘制树状图。
输出
请注意,在上述树状图中,一片叶子对应一个观测值,随着我们在树上的移动,类似的观测值会在更高的高度被融合。树状图的高度决定了聚类。为了识别聚类,我们可以用 cutree 切割树状图。 然后用 factoextra 包中的 fviz_cluster 函数将结果在散点图中可视化。
输出
我们还可以在3个集群周围提供一个树状图的边界,如下图所示。
输出
另外,我们可以使用 agnes 函数来进行分层聚类。与 hclust 不同的是, agnes 函数给出了聚类系数,它衡量了所发现的聚类结构的数量(数值接近于1表明聚类结构强)。
输出
完整的联结能带来更强的聚类结构。因此,我们使用这种聚集方法,用 agnes 函数进行分层聚类,如下图所示。
输出
分割式聚类的实现
与agnes工作类似的函数diana允许我们进行分割式分层聚类。然而,没有方法提供。
输出