Python学习入门之层次分析法

目录

 前言

1. 环境准备

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

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

 4.绘制层次聚类树

 5.绘制层次聚类热度图

 总结


 前言

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


1. 环境准备

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

pip install numpy pandas matplotlib scikit-learn scipy

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

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


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

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

np.random.seed(123)  # 设置随机数种子以保证结果可重复  
variables = ['X', 'Y', 'Z']  # 定义列名  
labels = ['ID_0', 'ID_1', 'ID_2', 'ID_3', 'ID_4']  # 定义行索引  
X = np.random.random_sample([5, 3]) * 10  # 生成5行3列的随机数矩阵,数值范围为0到10  

df = pd.DataFrame(X, columns=variables, index=labels)  # 创建数据框,使用随机生成的数据和指定的列名、行索引  

print(df)  # 打印数据框df  

输出结果:

 


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

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

# 计算距离关联矩阵,两两样本间的欧氏距离  
# row_dist = pd.DataFrame(squareform(pdist(df, metric='euclidean')), columns=labels, index=labels)  
# print(row_dist)  # 打印距离矩阵  

row_clusters = linkage(pdist(df, metric='euclidean'), method='complete')  # 计算距离矩阵并进行层次聚类,使用完全链接法  
# row_clusters = linkage(df.values, method='complete', metric='euclidean')  # 另一种方式,可以直接用数据框的值  

# 打印层次聚类结果,包括簇标签、距离和簇内项目数量  
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 函数绘制层次聚类树。该树形结构将显示聚类过程以及样本间的相似性。


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

 如图:


 5.绘制层次聚类热度图

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

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

 如图:


 总结

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快快飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值