实现 Python 聚类 HC(层次聚类)的完整指南
层次聚类(Hierarchical Clustering,HC)是一种重要的聚类算法,常用于数据分析和图像处理等领域。在这篇文章中,我们将一步一步地学习如何在 Python 中实现层次聚类。下面是实现的总体流程。
总体流程
步骤 | 描述 |
---|---|
1. 导入库 | 导入处理数据和进行聚类所需要的库 |
2. 准备数据 | 收集并准备要聚类的数据 |
3. 创建树状图 | 可视化数据的聚类结果 |
4. 执行聚类 | 使用层次聚类算法对数据进行聚类 |
5. 分析结果 | 分析聚类结果,提取有用的信息 |
步骤详解
1. 导入库
首先,我们需要导入相关的库。我们将使用 scipy
和 matplotlib
来进行层次聚类和数据可视化。
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 中实现层次聚类。无论是随机数据还是实际应用场景,只需按步骤执行,就可以得到宝贵的聚类结果和可视化图形。希望这篇文章能够帮助你在数据分析的旅途中走得更远,继续探索其他有趣的聚类方法!