人工智能——層次聚類算法

目錄

摘要

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.pswp.cn/news/903981.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903981.shtml
英文地址,請注明出處:http://en.pswp.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…