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 層次聚類算法的資料請關(guān)注腳本之家其它相關(guān)文章!
- 如何基于Python深度圖生成3D點(diǎn)云詳解
- Python如何用NumPy讀取和保存點(diǎn)云數(shù)據(jù)
- python 點(diǎn)云地面點(diǎn)濾波-progressive TIN densification(PTD)算法介紹
- python點(diǎn)云地面點(diǎn)濾波(Progressive Morphological Filter)算法介紹(PCL庫)
- python實(shí)點(diǎn)云分割k-means(sklearn)詳解
- Python實(shí)現(xiàn)點(diǎn)云投影到平面顯示
- 使用Python點(diǎn)云生成3D網(wǎng)格
相關(guān)文章
解決selenium模塊利用performance獲取network日志請求報(bào)錯(cuò)的問題(親測有效)
這篇文章主要介紹了解決selenium模塊利用performance獲取network日志請求報(bào)錯(cuò)的問題(親測有效),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Python爬蟲實(shí)現(xiàn)網(wǎng)頁信息抓取功能示例【URL與正則模塊】
這篇文章主要介紹了Python爬蟲實(shí)現(xiàn)網(wǎng)頁信息抓取功能,涉及Python使用URL與正則模塊針對網(wǎng)頁信息的讀取與匹配相關(guān)操作技巧,需要的朋友可以參考下2017-05-05python 中Arduino串口傳輸數(shù)據(jù)到電腦并保存至excel表格
這篇文章主要介紹了python Arduino串口傳輸數(shù)據(jù)到電腦并保存至excel表格,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10Python密碼學(xué)XOR算法編碼流程及乘法密碼教程
這篇文章主要為大家介紹了Python密碼學(xué)XOR流程及乘法密碼教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Windows+Anaconda3+PyTorch+PyCharm的安裝教程圖文詳解
這篇文章主要介紹了Windows+Anaconda3+PyTorch+PyCharm的安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04Python利用imshow制作自定義漸變填充柱狀圖(colorbar)
這篇文章主要介紹了Python利用imshow制作自定義漸變填充柱狀圖(colorbar),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12