python 層次聚類算法圖文示例
引言
- 層次聚類是一種構(gòu)建聚類層次結(jié)構(gòu)的聚類算法。該算法從分配給它們自己的集群的所有數(shù)據(jù)點(diǎn)開始。然后將兩個(gè)最近的集群合并到同一個(gè)集群中。最后,當(dāng)只剩下一個(gè)集群時(shí),該算法終止。
- 可以通過觀察樹狀圖來選擇最能描述不同組的簇?cái)?shù)的決定。聚類數(shù)的最佳選擇是樹狀圖中垂直線的數(shù)量,該水平線可以垂直橫穿最大距離而不與聚類相交。
1. 簡介

層次聚類(Hierarchical clustering)是一種常見的聚類算法,它將數(shù)據(jù)點(diǎn)逐步地合并成越來越大的簇,直到達(dá)到某個(gè)停止條件。層次聚類可以分為兩種方法:自下而上的聚合法(agglomerative)和自上而下的分 裂法(divisive)。在聚合法中,每個(gè)數(shù)據(jù)點(diǎn)最初被視為一個(gè)單獨(dú)的簇,然后每次迭代將距離最近的兩個(gè)簇合并為一個(gè)新的簇,直到所有點(diǎn)都合并成一個(gè)大簇。在分 裂法中,最初的簇被視為一個(gè)單獨(dú)的簇,然后每次迭代將當(dāng)前簇中距離最遠(yuǎn)的兩個(gè)點(diǎn)分成兩個(gè)新的簇,直到每個(gè)點(diǎn)都是一個(gè)簇為止。
2. 工作原理
- 使每個(gè)數(shù)據(jù)點(diǎn)成為單點(diǎn)簇→形成N個(gè)簇
- 取距離最近的兩個(gè)數(shù)據(jù)點(diǎn),使之成為一個(gè)簇→形成N-1個(gè)簇
- 取最近的兩個(gè)簇并使它們成為一個(gè)簇→形成N-2個(gè)簇。
- 重復(fù)第 3 步,直到只剩下一個(gè)集群。

有幾種方法可以測量聚類之間的距離以確定聚類規(guī)則,它們通常稱為鏈接方法。一些常見的鏈接方法是:
- 完全鏈接:兩個(gè)集群之間的距離定義為每個(gè)集群中兩點(diǎn)之間的最長距離。
- 單鏈接:兩個(gè)集群之間的距離定義為每個(gè)集群中兩點(diǎn)之間的最短距離。此鏈接可用于檢測數(shù)據(jù)集中的高值,這些值可能是異常值,因?yàn)樗鼈儗⒃谧詈蠛喜ⅰ?/li>
- 平均鏈接:兩個(gè)聚類之間的距離定義為一個(gè)聚類中的每個(gè)點(diǎn)與另一個(gè)聚類中的每個(gè)點(diǎn)之間的平均距離。
- Centroid-linkage:找到聚類1的質(zhì)心和聚類2的質(zhì)心,然后在合并前計(jì)算兩者之間的距離。
不同的鏈接方法導(dǎo)致不同的集群。
3. 樹狀圖
樹狀圖是一種顯示不同數(shù)據(jù)集之間的層次關(guān)系。正如已經(jīng)說過的,樹狀圖包含了層次聚類算法的記憶,因此只需查看樹狀圖就可以知道聚類是如何形成的。

4. Code
import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
# 生成隨機(jī)數(shù)據(jù)
np.random.seed(0)
X = np.random.randn(15, 2)
# 計(jì)算距離矩陣
Z = linkage(X, 'ward')
# 繪制樹形圖
plt.figure(figsize=(10, 5))
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Sample index')
plt.ylabel('Distance')
dendrogram(
Z,
leaf_rotation=90.,
leaf_font_size=8.,
)
plt.show()
在這個(gè)示例中,我們首先使用NumPy生成了一個(gè)隨機(jī)的二維數(shù)據(jù)集X,其中包含15個(gè)樣本。然后,我們使用SciPy中的linkage函數(shù)計(jì)算距離矩陣Z,這里使用了“ward”方法來計(jì)算簇之間的距離。最后,我們使用Matplotlib來繪制樹形圖,其中l(wèi)eaf_rotation和leaf_font_size參數(shù)用于調(diào)整葉子節(jié)點(diǎn)的旋轉(zhuǎn)角度和字體大小。
這個(gè)示例中生成的樹形圖顯示了不同樣本之間的距離,并且根據(jù)距離合并了不同的簇。可以通過樹形圖來確定最優(yōu)的簇的數(shù)量,可以在圖中找到最大距離的位置,然后畫一條水平線,這個(gè)水平線和垂直線的交點(diǎn)就是最優(yōu)的簇的數(shù)量。
以上就是python 層次聚類算法圖文示例的詳細(xì)內(nèi)容,更多關(guān)于python 層次聚類算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python使用樹狀圖實(shí)現(xiàn)可視化聚類詳解
- Python基于紋理背景和聚類算法實(shí)現(xiàn)圖像分割詳解
- Python K-means實(shí)現(xiàn)簡單圖像聚類的示例代碼
- Python使用OpenCV和K-Means聚類對(duì)畢業(yè)照進(jìn)行圖像分割
- Python實(shí)現(xiàn)K-means聚類算法并可視化生成動(dòng)圖步驟詳解
- 在Python中使用K-Means聚類和PCA主成分分析進(jìn)行圖像壓縮
- python基于K-means聚類算法的圖像分割
- python聚類算法解決方案(rest接口/mpp數(shù)據(jù)庫/json數(shù)據(jù)/下載圖片及數(shù)據(jù))
- 使用python實(shí)現(xiàn)3D聚類圖示例代碼
相關(guān)文章
Python在終端通過pip安裝好包以后在Pycharm中依然無法使用的問題(三種解決方案)
這篇文章主要介紹了Python在終端通過pip安裝好包以后在Pycharm中依然無法使用的問題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
詳解Python實(shí)現(xiàn)按任意鍵繼續(xù)/退出的功能
在學(xué)Python時(shí)在總想實(shí)現(xiàn)一個(gè)按任意鍵繼續(xù)/退出的程序(受.bat毒害), 奈何一直沒有寫,今天抽時(shí)間寫出來了,下面分享給大家,有需要的可以參考借鑒。2016-08-08
Python中用于計(jì)算對(duì)數(shù)的log()方法
這篇文章主要介紹了Python中用于計(jì)算對(duì)數(shù)的log()方法,是Python入門基礎(chǔ)中的必會(huì)的方法,需要的朋友可以參考下2015-05-05
keras的ImageDataGenerator和flow()的用法說明
這篇文章主要介紹了keras的ImageDataGenerator和flow()的用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07
python 牛頓法實(shí)現(xiàn)邏輯回歸(Logistic Regression)
這篇文章主要介紹了python 牛頓法實(shí)現(xiàn)邏輯回歸(Logistic Regression),幫助大家更好的進(jìn)行機(jī)器學(xué)習(xí),感興趣的朋友可以了解下2020-10-10
pandas的連接函數(shù)concat()函數(shù)的具體使用方法
這篇文章主要介紹了pandas的連接函數(shù)concat()函數(shù)的具體使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07

