欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 人工智能——层次聚类算法

人工智能——层次聚类算法

2025/5/4 22:39:36 来源:https://blog.csdn.net/weixin_55874238/article/details/147684768  浏览:    关键词:人工智能——层次聚类算法

目录

摘要

18 层次聚类

18.1 本章工作任务

18.2 本章技能目标

18.3 本章简介

18.4 编程实战

18.5 本章总结

18.6 本章作业

本章已完结!!!


摘要
 

本章实现的工作是:首先导入20名学生的3科成绩,然后根据优先聚合距离最近的两个数据组的聚类标准,得到由20名学生划分成的不同簇类。

本章掌握的技能是:1、使用 SciPy 包计算欧式距离。2、使用 dendrogram 画出聚类树图。3、使用 matplotlib 包实现数据可视化,绘制热度图。

18 层次聚类

18.1 本章工作任务

采用层次聚类编写程序,根据语文、数学、英语成绩对不同学生进行分层。1、算法的输入是:20名学生的语文、数学和英语成绩。2、算法的模型需要求解的是:任意两个数据集之间的距离。3、算法的结果是:20个数据组被先后聚合,最终逐层聚成一类。

18.2 本章技能目标

掌握层次聚类的原理。

使用Python计算出欧式距离。

使用Python画出聚类树图。

使用Python画出热度图。

18.3 本章简介

层次聚类分析是指:一种分层聚类的方法,对目标数据集使用某种标准,先后进行聚合,直至聚合到最后一层,得到一个由所有数据集逐层聚合成的集合。

层次聚类分析算法可以解决的实际应用问题是:已知20名学生的语文、数学和英语3科成绩(每一个学生的3科成绩相当于一个原始数据组),计算出任意两个数据组之间的距离后,将距离最近的先聚合,得到新的数据组,再计算任意两个数据组的距离,将距离最近的先聚合,以此类推,聚成一类。

本章的重点是:层次聚类分析的理解和使用。

18.4 编程实战

步骤1 引入相关包。引入pandas、numpy,seaborn和matplotlib,命名为pd,np,sns 和 plt。引入linkage、dendrogram 和 AgglomerativeClustering,以指定层次聚类判别相识度方法、画聚类树图和热度图。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial.distance import pdist, squareform
from scipy.cluster.hierarchy import linkage
from scipy.cluster.hierarchy import dendrogram
from sklearn.cluster import AgglomerativeClustering
import seaborn as sns

步骤2 显示数据的绝对路径,导入要使用的数据。

import os
thisFilePath = os.path.abspath('.')
os.chdir(thisFilePath)
os.getcwd()输出结果:'D:\\MyPythonFiles'

myData = pd.read_csv('myData_.csv')
myData.head()

输出结果:

步骤3 计算距离关联矩阵,任意两个簇之间的欧式距离,使用single-linkage(即两簇内最近元素的距离)作为组距。

row_clusters = linkage(pdist(myData, metric = 'euclidean'), method = 'single')
num = len(pdist(myData, metric = 'euclidean'))

步骤4 生成聚类的结果。

print(pd.DataFrame(row_clusters, columns = ['row_label1', 'row_label2', 'distance', 'new'], index=['cluster %d'% (i+1) for i in range(row_clusters.shape[0])]))输出结果:row_label1  row_label2   distance   new
cluster 1          0.0        17.0   0.000000   2.0
cluster 2          3.0        11.0   0.000000   2.0
cluster 3          2.0        10.0   0.000000   2.0
cluster 4         19.0        22.0   0.000000   3.0
cluster 5          1.0        18.0   0.000000   2.0
cluster 6          6.0        14.0   4.000000   2.0
cluster 7          5.0        15.0   6.928203   2.0
cluster 8          4.0        12.0   9.000000   2.0
cluster 9         13.0        21.0  11.401754   3.0
cluster 10        26.0        28.0  13.000000   5.0
cluster 11         8.0        16.0  14.000000   2.0
cluster 12         7.0        29.0  17.000000   6.0
cluster 13        27.0        31.0  17.058722   8.0
cluster 14        23.0        32.0  19.131126  11.0
cluster 15        20.0        33.0  22.158520  13.0
cluster 16        30.0        34.0  25.019992  15.0
cluster 17        25.0        35.0  26.851443  17.0
cluster 18         9.0        36.0  32.124757  18.0
cluster 19        24.0        37.0  32.202484  20.0

提示:

(1) 聚类树形成的过程:将符合 single-linkage 的两个簇合并为一个新簇,去除合并前的簇,之后迭代进行此过程。当合并到只有一个簇(聚类树的主干)时,迭代完成,聚类结束。

(2) 聚类的结果:row_label1 和 row_label2 表示聚类合并前的两个簇内最近元素,distance 表示合并前两个簇的距离,new 即为新簇内的元素个数。

步骤5 画出聚类树树图。

row_dendr = dendrogram(row_clusters, 1)
plt.tight_layout()
plt.ylabel('Euclidean distance')
plt.show()

输出结果:

提示:

图的横坐标是簇的类别,纵坐标是簇与簇之间的欧式距离(即簇与簇内元素的最近距离),同色的折线表示两个簇合并。

步骤6 画出热度图。

%matplotlib inline
fig = plt.figure(figsize=(12, 13))
axd = fig.add_axes([0.02, 0.138, 0.418, 0.719])
row_dendr = dendrogram(row_clusters, orientation='left')
myData_rowclust = myData.iloc[row_dendr['leaves'][::-1]]
axm = fig.add_axes([0.08, 0.1255, 0.63, 0.75])
cax = axm.matshow(myData_rowclust, interpolation='nearest', cmap='hot_r')
axd.set_xticks([])
axd.set_yticks([])for i in axd.spines.values():i.set_visible(False)
axm = sns.heatmap(myData_rowclust, annot = True, fmt = "d")
plt.show()

输出结果:

 

提示:

颜色深度和数据大小正相关(最右边的长条图说明了颜色深浅和数值大小的关系,颜色越深,数值越大),从热图上可以直观地看出簇内元素之间的距离关系,直观理解树图的合并过程。

18.5 本章总结

本章实现的工作是:首先导入20名学生的3科成绩,然后根据优先聚合距离最近的两个数据组的聚类标准,得到由20名学生划分成的不同簇类。

本章掌握的技能是:1、使用 SciPy 包计算欧式距离。2、使用 dendrogram 画出聚类树图。3、使用 matplotlib 包实现数据可视化,绘制热度图。

18.6 本章作业

实现本章的案例,即求出任意两个数组之间的距离,画出聚类树图和热度图。

本章已完结!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词