2.5.7
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 เพื่อรับผลแบ่งกลุ่ม
| |
| |
ถ้าใช้ 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