iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0

層次聚類(Hierarchical Clustering)是一種無監督學習算法,廣泛應用於探索數據的自然分組。該算法通過構建一個層次結構的樹形圖(樹狀圖或樹狀結構,稱為樹狀圖或dendrogram)來表示數據點之間的相似性和嵌套關係。與K-means這類需要預先指定聚類數量的算法不同,層次聚類不需要指定簇的數量,並且可以生成一個完整的聚類層次結構。

層次聚類的類型

層次聚類主要有兩種方法:

  1. 自下而上聚類(Agglomerative Clustering)

    • 這是一種「合併」策略,從每個數據點各自形成一個單獨的簇開始,然後逐步合併最相似的簇,直到最終形成一個簇或滿足某個停止條件。
  2. 自上而下聚類(Divisive Clustering)

    • 與自下而上的方法相反,自上而下聚類從整個數據集作為一個簇開始,然後逐步將其分割成更小的簇,直到每個數據點單獨成為一個簇或滿足其他停止條件。

算法步驟

  1. 初始化:將每個數據點作為一個單獨的簇。
  2. 計算距離:計算所有簇之間的距離或相似性,通常使用歐氏距離。
  3. 合併簇:選擇距離最近的兩個簇並將其合併。
  4. 重複:重複計算距離和合併的過程,直到所有數據點被合併成一個單一的簇。
  5. 生成樹狀圖:根據簇合併的順序生成樹狀圖,這有助於決定最合適的簇數。

優點

  • 不需要預先指定聚類的數量。
  • 層次結構能夠揭示數據的多層次結構。
  • 適合於處理噪聲和異常點。
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
from scipy.cluster.hierarchy import dendrogram, linkage

iris = load_iris()
X = iris.data

# 使用層次聚類進行聚類
linked = linkage(X, method='ward')

# 繪製樹狀圖
plt.figure(figsize=(10, 7))
dendrogram(linked,
           orientation='top',
           labels=iris.target,
           distance_sort='descending',
           show_leaf_counts=True)
plt.title('Iris Dataset Dendrogram')
plt.xlabel('Sample Index')
plt.ylabel('Distance')
plt.show()

上一篇
DAY15 K-means 15/30
下一篇
DAY17 DBSCAN 17/30
系列文
機器學習與深度學習背後框架與過程論文與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言