首页 > 编程语言 >层次聚类算法

层次聚类算法

时间:2023-03-17 23:11:14浏览次数:49  
标签:plt 层次 树状 距离 算法 集群 聚类 链接

动动发财的小手,点个赞吧!

  • 层次聚类是一种构建聚类层次结构的聚类算法。该算法从分配给它们自己的集群的所有数据点开始。然后将两个最近的集群合并到同一个集群中。最后,当只剩下一个集群时,该算法终止。
  • 可以通过观察树状图来选择最能描述不同组的簇数的决定。聚类数的最佳选择是树状图中垂直线的数量,该水平线可以垂直横穿最大距离而不与聚类相交。

1. 简介

层次聚类(Hierarchical clustering)是一种常见的聚类算法,它将数据点逐步地合并成越来越大的簇,直到达到某个停止条件。层次聚类可以分为两种方法:自下而上的聚合法(agglomerative)和自上而下的分裂法(divisive)。在聚合法中,每个数据点最初被视为一个单独的簇,然后每次迭代将距离最近的两个簇合并为一个新的簇,直到所有点都合并成一个大簇。在分裂法中,最初的簇被视为一个单独的簇,然后每次迭代将当前簇中距离最远的两个点分成两个新的簇,直到每个点都是一个簇为止。

2. 工作原理

  1. 使每个数据点成为单点簇→形成N个簇
  2. 取距离最近的两个数据点,使之成为一个簇→形成N-1个簇
  3. 取最近的两个簇并使它们成为一个簇→形成N-2个簇。
  4. 重复第 3 步,直到只剩下一个集群。

有几种方法可以测量聚类之间的距离以确定聚类规则,它们通常称为链接方法。一些常见的链接方法是:

  • 完全链接:两个集群之间的距离定义为每个集群中两点之间的最长距离。
  • 单链接:两个集群之间的距离定义为每个集群中两点之间的最短距离。此链接可用于检测数据集中的高值,这些值可能是异常值,因为它们将在最后合并。
  • 平均链接:两个聚类之间的距离定义为一个聚类中的每个点与另一个聚类中的每个点之间的平均距离。
  • Centroid-linkage:找到聚类1的质心和聚类2的质心,然后在合并前计算两者之间的距离。

不同的链接方法导致不同的集群。

3. 树状图

树状图是一种显示不同数据集之间的层次关系。正如已经说过的,树状图包含了层次聚类算法的记忆,因此只需查看树状图就可以知道聚类是如何形成的。

4. Code

import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt

# 生成随机数据
np.random.seed(0)
X = np.random.randn(15, 2)

# 计算距离矩阵
Z = linkage(X, 'ward')

# 绘制树形图
plt.figure(figsize=(10, 5))
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Sample index')
plt.ylabel('Distance')
dendrogram(
    Z,
    leaf_rotation=90.,
    leaf_font_size=8.,
)
plt.show()

在这个示例中,我们首先使用NumPy生成了一个随机的二维数据集X,其中包含15个样本。然后,我们使用SciPy中的linkage函数计算距离矩阵Z,这里使用了“ward”方法来计算簇之间的距离。最后,我们使用Matplotlib来绘制树形图,其中leaf_rotation和leaf_font_size参数用于调整叶子节点的旋转角度和字体大小。

这个示例中生成的树形图显示了不同样本之间的距离,并且根据距离合并了不同的簇。可以通过树形图来确定最优的簇的数量,可以在图中找到最大距离的位置,然后画一条水平线,这个水平线和垂直线的交点就是最优的簇的数量。

本文由mdnice多平台发布

标签:plt,层次,树状,距离,算法,集群,聚类,链接
From: https://www.cnblogs.com/swindler/p/17228597.html

相关文章

  • 漫画:什么是选择排序算法?
    选择排序是一种简单直观的算法,今天我们聊聊选择排序的思想,代码以及复杂度排序思想一天,小一尘和师傅下山去了,在集市中路经一个水果摊,只见水果摊上摆着色泽基本相同但大......
  • 漫画:什么是冒泡排序算法?
    面试官:写一个冒泡排序吧冒泡排序是一个比较经典和简单的排序算法,今天我们从从算法本身,时间复杂度以及稳定性方面来看看冒泡排序,这些方面也是研究其他排序算法的一般思......
  • 漫画:什么是插入排序算法?
    面试官:聊聊插入排序插入排序是一种比较简单直观的排序算法,适用处理数据量比较少或者部分有序的数据,今天我们来聊聊插入排序一、排序思想只见慧能拿出了一副牌,洗......
  • 漫画:什么是归并排序算法?
    归并排序是建立在归并操作的一种高效的排序方法,该方法采用了分治的思想,比较适用于处理较大规模的数据,但比较耗内存,今天我们聊聊归并排序一、排序思想一天,小一尘和慧能......
  • 漫画:什么是希尔排序算法?
    希尔排序(ShellSort)是以它的发明者DonaldShell名字命名的,希尔排序是插入排序的改进版,实现简单,对于中等规模数据的性能表现还不错一、排序思想前情回顾:漫画:什么是插入排......
  • 漫画:什么是堆排序算法?
    面试官:写一个堆排吧堆排是基于堆的一种排序算法,对于堆的了解,请看可以管理时间的二叉堆(如果对堆的插入和删除不清楚,强烈建议先看堆),今天我们聊聊堆排的思想,复杂度以及稳定......
  • 漫画:什么是快速排序算法?
    这篇文章,以对话的方式,详细着讲解了快速排序以及排序排序的一些优化。一禅:归并排序是一种基于分治思想的排序,处理的时候可以采取递归的方式来处理子问题。我弄个例子......
  • 代码随想录算法训练营Day45 动态规划
    代码随想录算法训练营代码随想录算法训练营Day45动态规划|70.爬楼梯(进阶)322.零钱兑换70.爬楼梯(进阶)题目链接:70.爬楼梯(进阶假设你正在爬楼梯。需要n 阶你才能......
  • Qz学算法-数据结构篇(非线性结构、树)
    非线性结构非线性结构包括:二维数组,多维数组,广义表,树结构,图结构树树结构为什么需要树结构数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找......
  • 使用简单算法两小时实现猎杀乌姆帕斯(Hunt the Wumpus)Python小游戏
    “HunttheWumpus”是什么?引用wiki百科:HunttheWumpus是GregoryYob于1973年开发的一款基于文本的冒险游戏。在游戏中,玩家在一系列连接的洞穴中穿行,这些洞穴排列......