实现 Python 聚类 HC(层次聚类)的完整指南

层次聚类(Hierarchical Clustering,HC)是一种重要的聚类算法,常用于数据分析和图像处理等领域。在这篇文章中,我们将一步一步地学习如何在 Python 中实现层次聚类。下面是实现的总体流程。

总体流程

步骤 描述
1. 导入库 导入处理数据和进行聚类所需要的库
2. 准备数据 收集并准备要聚类的数据
3. 创建树状图 可视化数据的聚类结果
4. 执行聚类 使用层次聚类算法对数据进行聚类
5. 分析结果 分析聚类结果,提取有用的信息

步骤详解

1. 导入库

首先,我们需要导入相关的库。我们将使用 scipymatplotlib 来进行层次聚类和数据可视化。

import numpy as np             # 用于数值计算
import matplotlib.pyplot as plt # 用于数据可视化
from scipy.cluster.hierarchy import dendrogram, linkage, fcluster # 导入层次聚类的函数

2. 准备数据

接下来,我们需要准备一些数据。这里我们以生成随机数据为例。你可以使用实际的数据集。

# 生成随机数据
np.random.seed(42)  # 设置随机种子
data = np.random.rand(10, 2)  # 生成10个2维随机数

3. 创建树状图

树状图是层次聚类结果的一种可视化方式。我们将用 dendrogram 函数创建树状图。

# 使用linkage函数生成层次聚类数据
Z = linkage(data, 'ward')  # 使用ward方法,计算聚类距离

# 绘制树状图
plt.figure(figsize=(10, 5))
dendrogram(Z)  # 绘制树状图
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Sample Index')
plt.ylabel('Distance')
plt.show()  # 显示图形

4. 执行聚类

现在我们可以使用 fcluster 函数根据我们定义的距离阈值进行聚类。

# 根据距离阈值进行聚类
threshold = 1.5  # 设置距离阈值
clusters = fcluster(Z, threshold, criterion='distance')  # 生成聚类标签

print("聚类结果:", clusters)  # 打印聚类结果

5. 分析结果

最后,我们可以对聚类结果进行分析,并将结果可视化。

# 用不同颜色绘制每个聚类
plt.figure(figsize=(8, 6))
for cluster in np.unique(clusters):
    plt.scatter(data[clusters == cluster][:, 0], 
                data[clusters == cluster][:, 1], 
                label=f'Cluster {cluster}')
    
plt.title('Clusters Visualization')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.legend()
plt.show()  # 显示图形

实际操作流程图

journey
    title 聚类HC的流程
    section 数据准备
      导入库: 5: 导入相关库
      生成随机数据: 5: 准备待聚类的数据
    section 聚类过程
      创建树状图: 5: 使用树状图可视化数据
      执行聚类: 5: 使用层次聚类算法
    section 结果分析
      可视化聚类结果: 5: 分析和展示聚类的成果

系统状态图

stateDiagram
    [*] --> 数据准备
    数据准备 --> 聚类准备
    聚类准备 --> 树状图创建
    树状图创建 --> 执行聚类
    执行聚类 --> 结果分析
    结果分析 --> [*]

结尾

通过上述步骤,你已经学会了如何在 Python 中实现层次聚类。无论是随机数据还是实际应用场景,只需按步骤执行,就可以得到宝贵的聚类结果和可视化图形。希望这篇文章能够帮助你在数据分析的旅途中走得更远,继续探索其他有趣的聚类方法!