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

目录

摘要

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 本章作业

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

本章已完结!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中安装mysql8,转载及注意事项

一、先前往官网下载mysql8 下载地址: https://dev.mysql.com/downloads/选择Linux 二、删除Linux中的mysql(如果有的话),上传安装包 1、先查看mysql是否存在,命令如下: rpm -qa|grep -i mysql如果使用这…

《算法导论(第4版)》阅读笔记:p4-p5

《算法导论(第4版)》学习第 3 天,p4-p5 总结,总计 2 页。 一、技术总结 1.instance Thus, given the input sequence h31; 41; 59; 26; 41; 58i, a correct sorting algorithm returns as output the sequence h26; 31; 41; 41; 58; 59i. Such an inp…

第十四篇:系统分析师第三遍——15章

目录 一、目标二、计划三、完成情况四、意外之喜(最少2点)1.计划内的明确认知和思想的提升标志2.计划外的具体事情提升内容和标志 五、总结六、后面准备怎么做? 一、目标 通过参加考试,训练学习能力,而非单纯以拿证为目的。 1.在复习过程中&…

Easy云盘总结篇-登录注册

**说在前面:该项目是跟着B站一位大佬写的,不分享源码,支持项目付费 ** 获取图形验证码 可以看到这里有2两种图形验证码,分为: type0:如上图下面那个,是完成操作后要进行注册的验证码 type1: 如…

【前端知识】Vue3状态组件Pinia详细介绍

Vue3状态组件Pinia详细介绍 关联知识 Pinia 组件介绍、核心原理及使用方式 Pinia 组件介绍 Pinia 是 Vue.js 的官方状态管理库,专为 Vue 3 设计,提供简洁的 API 和强大的 TypeScript 支持。其核心组件包括: • Store:状态存储容器…

mysql 云服务远程linux创建数据库

1. 本地使用已创建好的用户创建数据库出现问题 提示access deniey finalshell远程创建新用户 :~# mysql -u root -pR***34 > CREATE DATABASE r***e; > CREATE USER r**ue% IDENTIFIED BY Ry****34; > GRANT ALL PRIVILEGES ON ry_vue.* TO r***e%; > FLUSH PRI…

【“星瑞” O6 评测】 — CPU llama.cpp不同优化速度对比

前言 随着大模型应用场景的不断拓展,arm cpu 凭借其独特优势在大模型推理领域的重要性日益凸显。它在性能、功耗、架构适配等多方面发挥关键作用,推动大模型在不同场景落地 1. Kleidi AI 简介 Arm Kleidi 成为解决这些挑战的理想方案,它能…

wireshark抓包也能被篡改?

wireshark本身并不能修改数据包,但是tcprewrite 可以修改数据包,然后通过tcpreplay 进行重放,这个时候wireshark抓的包,就是被篡改后的pcap包了。 ailx10 网络安全优秀回答者 互联网行业 安全攻防员 去咨询 步骤一&#xff1a…

使用PyTorch进行热狗图像分类模型微调

本教程将演示如何使用PyTorch框架对预训练模型进行微调,实现热狗与非热狗图像的分类任务。我们将从数据准备开始,逐步完成数据加载、可视化等关键步骤。 1. 环境配置与库导入 %matplotlib inline import os import torch from torch import nn from d2l…

内容中台与企业内容管理核心差异剖析

功能定位与架构设计差异 在企业数字化进程中,内容中台与企业内容管理(ECM)的核心差异首先体现在功能定位层面。传统ECM系统以文档存储、版本控制及权限管理为核心,主要服务于企业内部知识库的静态管理需求,例如通过Ba…

使用PyMongo连接MongoDB的基本操作

MongoDB是由C语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组。在这一节中,我们就来回顾Python 3下MongoDB的存储操作。 常用命令:…

第 12 届蓝桥杯 C++ 青少组中 / 高级组省赛 2021 年真题

一、选择题 第 1 题 题目:下列符号中哪个在 C 中表示行注释 ( )。 A. ! B. # C. ] D. // 正确答案:D 答案解析: 在 C 中,//用于单行注释(行注释),从//开始到行末的内容会被编译器忽略。选项 A…

【python】【UV】一篇文章学完新一代 Python 环境与包管理器使用指南

🐍 UV:新一代 Python 环境与包管理器使用指南 一、UV 是什么? UV 是由 Astral 团队开发的高性能 Python 环境管理器,旨在统一替代 pyenv、pip、venv、pip-tools、pipenv 等工具。 1.1 UV 的主要功能 🚀 极速包安装&…

前端性能优化2:结合HTTPS与最佳实践,全面优化你的网站性能

点亮极速体验:结合HTTPS与最佳实践,为你详解网站性能优化的道与术 在如今这个信息爆炸、用户耐心极其有限的数字时代,网站的性能早已不是一个可选项,而是关乎生存和发展的核心竞争力。一个迟缓的网站,无异于在数字世界…

JavaWeb:vueaxios

一、简介 什么是vue? 快速入门 <!-- 3.准备视图元素 --><div id"app"><!-- 6.数据渲染 --><h1>{{ msg }}</h1></div><script type"module">// 1.引入vueimport { createApp, ref } from https://unpkg.com/vu…

Tauri联合Vue开发中Vuex与Pinia关系及前景分析

在 TauriVue 的开发场景中&#xff0c;Vuex 和 Pinia 是两种不同的状态管理工具&#xff0c;它们的关系和前景可以从以下角度分析&#xff1a; 一、Vuex 与 Pinia 的关系 继承与发展 Pinia 最初是作为 Vuex 5 的提案设计的&#xff0c;其目标是简化 Vuex 的复杂性并更好地适配 …

Linux中的时间同步

一、时间同步服务扩展总结 1. 时间同步的重要性 多主机协作需求&#xff1a;在分布式系统、集群、微服务架构中&#xff0c;时间一致性是日志排序、事务顺序、数据一致性的基础。 安全协议依赖&#xff1a;TLS/SSL证书、Kerberos认证等依赖时间有效性&#xff0c;时间偏差可能…

【算法基础】三指针排序算法 - JAVA

一、基础概念 1.1 什么是三指针排序 三指针排序是一种特殊的分区排序算法&#xff0c;通过使用三个指针同时操作数组&#xff0c;将元素按照特定规则进行分类和排序。这种算法在处理包含有限种类值的数组时表现出色&#xff0c;最经典的应用是荷兰国旗问题&#xff08;Dutch …

《操作系统真象还原》第十二章(2)——进一步完善内核

文章目录 前言可变参数的原理实现系统调用write更新syscall.h更新syscall.c更新syscall-init.c 实现printf编写stdio.h编写stdio.c 第一次测试main.cmakefile结果截图 完善printf修改main.c 结语 前言 上部分链接&#xff1a;《操作系统真象还原》第十二章&#xff08;1&#…

ICML2021 | DeiT | 训练数据高效的图像 Transformer 与基于注意力的蒸馏

Training data-efficient image transformers & distillation through attention 摘要-Abstract引言-Introduction相关工作-Related Work视觉Transformer&#xff1a;概述-Vision transformer: overview通过注意力机制蒸馏-Distillation through attention实验-Experiments…