python数据可视化技巧的100个练习 -- 25. 层次聚类树状图
一家营销公司希望基于各种特征了解不同产品类别之间的相似性。你的任务是对该数据集进行层次聚类,并绘制树状图以可视化聚类结果。生成一个包含 10 种产品、每种产品有 4 个特征的随机数据集,并使用层次聚类创建树状图。【数据生成代码示例】
import numpy as npnp.random.seed(42)data = np.random.rand(10, 4)labels = [f'Product {i}' for i in range(1, 11)]
【图表答案】
【代码答案】
import numpy as npimport matplotlib.pyplot as pltimport scipy.cluster.hierarchy as schnp.random.seed(42)data = np.random.rand(10, 4)labels = [f'Product {i}' for i in range(1, 11)]plt.figure(figsize=(10, 7))dendrogram = sch.dendrogram(sch.linkage(data, method='ward'), labels=labels)plt.title('层次聚类树状图')plt.xlabel('产品')plt.ylabel('欧几里得距离')plt.show()
层次聚类是一种聚类分析方法,旨在构建聚类的层次结构。它特别适用于理解数据集的结构,并可视化不同数据点之间的关系。在这个练习中,我们首先使用 NumPy 生成一个包含 10 种产品、每种产品有 4 个特征的随机数据集。然后,我们使用 SciPy 库中的 linkage 函数进行层次聚类。linkage 函数创建一个编码为链接矩阵的层次聚类。我们使用 'ward' 方法,该方法最小化合并聚类的方差。最后,我们使用 SciPy 中的 dendrogram 函数绘制树状图,以树的形式可视化层次聚类。树状图的 x 轴代表产品,y 轴代表聚类之间的欧几里得距离。【小知识】
- 本练习中使用的凝聚型聚类,从每个数据点作为一个单独的聚类开始,逐步合并最近的聚类对。
- 分裂型聚类则相反,从整个数据集作为一个单独的聚类开始,将其拆分为更小的聚类。
- 距离度量和链接方法(例如单链接、全链接、平均链接、ward)的选择可能会显著影响最终的树状图和聚类结果。