خوشه بندی سلسله مراتبی (Hierarchical Clustering)
«خوشه بندی سلسله مراتبی» یک روش بدون ناظر است. بدون ناظر یعنی «هدف» نداریم و آموزش لازم نیست. هدف، گروه کردن نقاط شبیه هم است تا رابطه ها را بهتر ببینیم.
خوشه بندی سلسله مراتبی چیست؟
ما از نوع «تجمیعی (Agglomerative)» استفاده می کنیم. ابتدا هر نقطه یک خوشه است. سپس نزدیک ترین خوشه ها ادغام می شوند. این کار ادامه می یابد تا یک خوشه بزرگ بسازیم. فاصله «اُقلیدسی (Euclidean)» و پیوند «ورد (Ward)» استفاده می شود.
نمایش داده های خام
چند نقطه ساده می سازیم و پراکندگی را می بینیم.
import numpy as np
import matplotlib.pyplot as plt
x = [4, 5, 10, 4, 3, 11, 14, 6, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]
plt.scatter(x, y)
plt.show()
دندروگرام با SciPy
«دندروگرام (Dendrogram)» درخت ادغام ها را نشان می دهد. هر انشعاب، یک ادغام است.
import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
x = [4, 5, 10, 4, 3, 11, 14, 6, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]
data = list(zip(x, y))
linkage_data = linkage(data, method='ward', metric='euclidean')
dendrogram(linkage_data)
plt.show()
خوشه بندی با scikit-learn
مدل «AgglomerativeClustering» را می سازیم. سپس برچسب هر نقطه را می گیریم و رنگ می کنیم.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
x = [4, 5, 10, 4, 3, 11, 14, 6, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]
data = list(zip(x, y))
model = AgglomerativeClustering(n_clusters=2, linkage='ward')
labels = model.fit_predict(data)
plt.scatter(x, y, c=labels)
plt.show()
نکته: تعداد خوشه ها را با n_clusters تعیین کن. برای داده های واقعی، مقدارها را آزمایش کن.
گام های عملی سریع
- داده را آماده کن و نرمال کن اگر لازم بود.
- linkage یا مدل تجمیعی را انتخاب کن.
- دندروگرام یا برچسب ها را رسم و بررسی کن.
جمع بندی سریع
- روش بدون ناظر است و هدف ندارد.
- Ward و فاصله اُقلیدسی رایج هستند.
- دندروگرام روند ادغام را نشان می دهد.
- برچسب های sklearn، خوشه هر نقطه را می دهد.
برای ادامه، ماتریس اغتشاش را مرور کن. همچنین درخت تصمیم را ببین. صفحه ی خوشه بندی سلسله مراتبی را نشانه گذاری کن.