python 层次聚类算法图文示例

作者:冷冻工厂 时间:2023-09-25 05:57:46 

引言

  • 层次聚类是一种构建聚类层次结构的聚类算法。该算法从分配给它们自己的集群的所有数据点开始。然后将两个最近的集群合并到同一个集群中。最后,当只剩下一个集群时,该算法终止。

  • 可以通过观察树状图来选择最能描述不同组的簇数的决定。聚类数的最佳选择是树状图中垂直线的数量,该水平线可以垂直横穿最大距离而不与聚类相交。

1. 简介

python 层次聚类算法图文示例

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

2. 工作原理

  • 使每个数据点成为单点簇→形成N个簇

  • 取距离最近的两个数据点,使之成为一个簇→形成N-1个簇

  • 取最近的两个簇并使它们成为一个簇→形成N-2个簇。

  • 重复第 3 步,直到只剩下一个集群。

python 层次聚类算法图文示例

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

  • 完全链接:两个集群之间的距离定义为每个集群中两点之间的最长距离。

  • 单链接:两个集群之间的距离定义为每个集群中两点之间的最短距离。此链接可用于检测数据集中的高值,这些值可能是异常值,因为它们将在最后合并。

  • 平均链接:两个聚类之间的距离定义为一个聚类中的每个点与另一个聚类中的每个点之间的平均距离。

  • Centroid-linkage:找到聚类1的质心和聚类2的质心,然后在合并前计算两者之间的距离。

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

3. 树状图

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

python 层次聚类算法图文示例

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参数用于调整叶子节点的旋转角度和字体大小。

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

来源:https://juejin.cn/post/7211467514412646455

标签:python,NumPy,读取数据,保存数据
0
投稿

猜你喜欢

  • 网站设计配色方案教程

    2007-10-10 19:38:00
  • Python 如何对文件目录操作

    2022-10-08 05:40:04
  • mysql语法之DQL操作详解

    2024-01-19 09:39:10
  • python中扫描条形码和二维码的实现代码

    2023-02-15 23:00:12
  • Python lambda表达式原理及用法解析

    2021-03-02 18:52:12
  • AJAX实现延时顺序请求多个URL

    2007-12-06 18:32:00
  • Python基于Tkinter模块实现的弹球小游戏

    2022-11-25 15:32:16
  • MySQL在Windows中net start mysql 启动MySQL服务报错 发生系统错误解决方案

    2024-01-12 21:39:42
  • python七种方法判断字符串是否包含子串

    2023-09-19 04:06:20
  • Python模块_PyLibTiff读取tif文件的实例

    2023-04-11 03:22:06
  • Python采集某度贴吧排行榜实战示例

    2022-03-08 21:07:17
  • Mysql之SQL Mode用法详解

    2024-01-24 06:19:19
  • Java用正则表达式实现${name}形式的字符串模板实例

    2023-08-05 14:10:01
  • 内容添加asp.net

    2024-06-05 09:27:29
  • Python爬取股票交易数据并可视化展示

    2022-02-06 13:13:22
  • 一文详解Python定时任务触发

    2021-05-13 14:27:02
  • 关于Mysql5.7及8.0版本索引失效情况汇总

    2024-01-21 08:35:35
  • MySQL中InnoDB的间隙锁问题

    2024-01-25 11:13:58
  • Oracle如何获取数据库系统的当前时间

    2024-01-21 22:20:55
  • Mysql复制表三种实现方法及grant解析

    2024-01-13 06:03:23
  • asp之家 网络编程 m.aspxhome.com