Hierarchical Clustering

Basic

Hierarchical Clustering | อ่านโครงสร้างจากเดนโดรแกรม

まとめ
  • การจัดกลุ่มแบบลำดับชั้นค่อยๆ รวม (หรือแยก) กลุ่ม แล้วใช้เดนโดรแกรมช่วยเลือกจำนวนคลัสเตอร์ได้ยืดหยุ่น
  • เวอร์ชัน agglomerative เริ่มจากหนึ่งคลัสเตอร์ต่อจุด แล้วรวมคู่ที่ใกล้ที่สุดตามเกณฑ์ลิงเกจ
  • เลือกลิงเกจ (ward, complete, average, single ฯลฯ) และระยะ (Euclidean, cosine ฯลฯ) เพื่อปรับนิยามความใกล้
  • ใช้ AgglomerativeClustering หรือ scipy.cluster.hierarchy เพื่อสร้างทั้งโครงสร้างต้นไม้และป้ายคลัสเตอร์ได้อย่างง่ายดาย

ภาพรวมเชิงสัญชาติญาณ #

วิธีนี้สรุป คลาสเตอร์เป็น “ต้นไม้” ของความคล้าย: เริ่มจากจุดเดี่ยวแล้วจับคู่ที่ใกล้ที่สุด การดูเดนโดรแกรมและตัดที่ระยะที่เหมาะช่วยให้เลือกจำนวนคลัสเตอร์ด้วยสายตาได้โดยไม่กำหนดล่วงหน้า

สูตรสำคัญ #

ระยะระหว่างคลัสเตอร์ขึ้นกับลิงเกจ:

  • Ward: เพิ่มขึ้นของผลรวมกำลังสองภายในคลัสเตอร์
  • Complete: ระยะที่ไกลที่สุดระหว่างสองคลัสเตอร์
  • Average: ระยะเฉลี่ยของทุกคู่จุด
  • Single: ระยะที่ใกล้ที่สุดระหว่างคลัสเตอร์

ตัวอย่าง Ward:

$$ \Delta = \frac{|C_i||C_j|}{|C_i| + |C_j|} \lVert \boldsymbol{\mu}_i - \boldsymbol{\mu}_j \rVert^2 $$

ใช้ \(\Delta\) เป็นเกณฑ์เลือกรวมคลัสเตอร์

ทดลองด้วย Python #

รัน linkage เพื่อวาดเดนโดรแกรม แล้วใช้ AgglomerativeClustering เพื่อรับผลแบ่งกลุ่ม

import numpy as np
from sklearn.datasets import make_blobs
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt

X, _ = make_blobs(n_samples=50, centers=3, cluster_std=0.7, random_state=42)

Z = linkage(X, method="ward")

plt.figure(figsize=(8, 4))
dendrogram(Z, truncate_mode="level", p=5)
plt.title("Hierarchical clustering (Ward)")
plt.xlabel("sample index")
plt.ylabel("distance")
plt.show()

ตัวอย่างเดนโดรแกรมของ Ward linkage

from sklearn.cluster import AgglomerativeClustering

clustering = AgglomerativeClustering(
    n_clusters=3,
    linkage="average",
    affinity="euclidean",
)
labels = clustering.fit_predict(X)

ถ้าใช้ distance_threshold ต้องไม่กำหนด n_clusters พร้อมกัน

เอกสารอ้างอิง #

  • Ward, J. H. (1963). Hierarchical Grouping to Optimize an Objective Function. Journal of the American Statistical Association.
  • Müllner, D. (2011). Modern Hierarchical, Agglomerative Clustering Algorithms. arXiv:1109.2378.
  • scikit-learn developers. (2024). Hierarchical clustering. https://scikit-learn.org/stable/modules/clustering.html#hierarchical-clustering