当前位置:   article > 正文

Python学习入门之层次分析法

Python学习入门之层次分析法

目录

 前言

1. 环境准备

 2. 加载数据(创建数据框)

 3.计算距离矩阵并输出聚类结果

 4.绘制层次聚类树

 5.绘制层次聚类热度图

 总结


 前言

        层次分析法是一种常用的聚类技术,旨在将数据对象根据其相似性分组。这种方法特别适用于探索性数据分析,它可以帮助我们以树状结构清楚地理解数据的层次关系。本文将通过一个简单的 Python 示例介绍如何使用层次聚类分析法对数据进行处理,并可视化分析结果。


1. 环境准备

首先,我们需要安装和导入所需的库。如果你还未安装这些库,可以使用以下命令:

pip install numpy pandas matplotlib scikit-learn scipy

 接下来,导入所需的模块:

  1. import pandas as pd # 导入pandas库
  2. import numpy as np # 导入numpy库
  3. import matplotlib.pyplot as plt # 导入matplotlib绘图库
  4. from scipy.spatial.distance import pdist, squareform # 从scipy库中导入计算距离的模块
  5. from scipy.cluster.hierarchy import linkage # 从scipy库中导入层次聚类的链接函数
  6. from scipy.cluster.hierarchy import dendrogram # 从scipy库中导入绘制树状图的函数
  7. from sklearn.cluster import AgglomerativeClustering # 从sklearn库中导入凝聚层次聚类算法

 2. 加载数据(创建数据框)

生成一个包含随机数据的数据框,并给它指定列名和行索引,以便于进一步的数据分析或处理。

  1. np.random.seed(123) # 设置随机数种子以保证结果可重复
  2. variables = ['X', 'Y', 'Z'] # 定义列名
  3. labels = ['ID_0', 'ID_1', 'ID_2', 'ID_3', 'ID_4'] # 定义行索引
  4. X = np.random.random_sample([5, 3]) * 10 # 生成5行3列的随机数矩阵,数值范围为0到10
  5. df = pd.DataFrame(X, columns=variables, index=labels) # 创建数据框,使用随机生成的数据和指定的列名、行索引
  6. print(df) # 打印数据框df

输出结果:

 


 3.计算距离矩阵并输出聚类结果

接下来,我们使用层次聚类方法来计算样本间的欧几里得距离,并创建距离关联矩阵。我们将应用linkage函数来计算层次聚类。

  1. # 计算距离关联矩阵,两两样本间的欧氏距离
  2. # row_dist = pd.DataFrame(squareform(pdist(df, metric='euclidean')), columns=labels, index=labels)
  3. # print(row_dist) # 打印距离矩阵
  4. row_clusters = linkage(pdist(df, metric='euclidean'), method='complete') # 计算距离矩阵并进行层次聚类,使用完全链接法
  5. # row_clusters = linkage(df.values, method='complete', metric='euclidean') # 另一种方式,可以直接用数据框的值
  6. # 打印层次聚类结果,包括簇标签、距离和簇内项目数量
  7. print(pd.DataFrame(row_clusters, columns=['row label1', 'row label2', 'distance', 'no. of items in clust.'],index=['cluster %d' % (i + 1) for i in range(row_clusters.shape[0])]))

 输出结果如:


 4.绘制层次聚类树

使用 dendrogram 函数绘制层次聚类树。该树形结构将显示聚类过程以及样本间的相似性。

  1. # 绘制层次聚类树
  2. row_dendr = dendrogram(row_clusters, labels=labels) # 绘制层次聚类的树状图
  3. plt.tight_layout() # 自动调整子图参数,使之填充整个图像区域
  4. plt.ylabel('Euclidean distance') # 设置y轴标签
  5. plt.show() # 显示图像

 如图:


 5.绘制层次聚类热度图

为了更深入地分析聚类结果,我们还可以绘制热度图,帮助我们更直观地了解聚类的效果。

  1. # 层次聚类热度图
  2. fig = plt.figure(figsize=(8, 8)) # 创建一个8x8的图形
  3. axd = fig.add_axes([0.09, 0.1, 0.2, 0.6]) # 添加第一个坐标轴,用于绘制树状图
  4. row_dendr = dendrogram(row_clusters, orientation='right') # 绘制右侧的树状图
  5. df_rowclust = df.iloc[row_dendr['leaves'][::-1]] # 根据树状图叶子的顺序重新排列数据框
  6. axm = fig.add_axes([0.23, 0.1, 0.6, 0.6]) # 添加第二个坐标轴,用于绘制热度图
  7. cax = axm.matshow(df_rowclust, interpolation='nearest', cmap='hot_r') # 绘制热度图
  8. axd.set_xticks([]) # 隐藏x轴刻度
  9. axd.set_yticks([]) # 隐藏y轴刻度
  10. for i in axd.spines.values(): # 隐藏坐标轴的边框
  11. i.set_visible(False)
  12. fig.colorbar(cax) # 添加颜色条
  13. axm.set_xticklabels([''] + list(df_rowclust.columns)) # 设置x轴标签
  14. axm.set_yticklabels([''] + list(df_rowclust.index)) # 设置y轴标签
  15. plt.show() # 显示热度图

 如图:


 总结

       本文介绍了如何使用 Python 进行层次聚类分析,包括创建数据框、计算距离矩阵、绘制层次聚类树和热度图的过程。通过这些步骤,我们不仅能够对数据进行聚类分析,还能够可视化结果以便于解读。层次分析法在数据挖掘与机器学习中是一个非常重要的工具,值得深入学习与实践。希望本文能够帮助你更好地理解层次分析法的基本概念和应用方法。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/958236
推荐阅读
相关标签
  

闽ICP备14008679号