آموزش رایگان صفر تا صد یادگیری ماشین (Machine Learning) به زبان ساده
-
خوش آمدید به یادگیری ماشین!
-
میانگین، میانه و مد در یادگیری ماشین
-
انحراف معیار (Standard Deviation) در یادگیری ماشین
-
صدک (Percentile) در یادگیری ماشین
-
توزیع دادهها در یادگیری ماشین
-
توزیع نرمال دادهها در یادگیری ماشین
-
نمودار پراکندگی (Scatter Plot) در یادگیری ماشین
-
رگرسیون خطی در یادگیری ماشینی
-
رگرسیون چندجملهای در یادگیری ماشین
-
رگرسیون چندگانه در یادگیری ماشین
-
روش Train/Test در یادگیری ماشین
-
درخت تصمیمگیری در یادگیری ماشین
-
ماتریس سردرگمی (Confusion Matrix) در یادگیری ماشین
-
خوشهبندی سلسلهمراتبی (Hierarchical Clustering) در یادگیری ماشین
-
رگرسیون لجستیک در یادگیری ماشین
-
Grid Search در یادگیری ماشین
-
پردازش دادههای دستهای (Categorical Data) در یادگیری ماشین
-
خوشهبندی K-Means در یادگیری ماشین
-
یادگیری Bootstrap Aggregation (Bagging) در یادگیری ماشین
-
کراس والیدیشن (Cross Validation) در یادگیری ماشین
-
منحنی AUC - ROC در یادگیری ماشین
-
الگوریتم K-Nearest Neighbors (KNN) در یادگیری ماشین
خوشهبندی سلسلهمراتبی (Hierarchical Clustering) در یادگیری ماشین
خوشهبندی سلسلهمراتبی یکی از روشهای محبوب در یادگیری ماشین بدون نظارت است که برای دستهبندی دادهها استفاده میشود.
📌 فهرست مطالب
🧐 خوشهبندی سلسلهمراتبی چیست؟
خوشهبندی سلسلهمراتبی (Hierarchical Clustering) یک روش بدون نظارت (Unsupervised Learning) برای دستهبندی دادهها است. در این روش، الگوریتم بر اساس میزان تفاوت بین دادهها، خوشههایی ایجاد میکند.
🔹 بدون نیاز به آموزش: نیازی به متغیر هدف (Target) نداریم و مدل بهطور خودکار دادهها را گروهبندی میکند.
🔹 مناسب برای مصورسازی: میتوان رابطه بین دادهها را بهسادگی تحلیل و تفسیر کرد.
✅ کاربردها:
- گروهبندی مشتریان بر اساس رفتار خرید
- تحلیل ساختار ژنتیکی دادهها
- تقسیمبندی تصاویر در پردازش تصویر
⚙️ نحوه کار خوشهبندی سلسلهمراتبی
در این مقاله، از الگوریتم Agglomerative Clustering استفاده میکنیم که یک روش پایین به بالا (Bottom-Up) است.
🔹 در ابتدا، هر نقطه یک خوشه مجزا است.
🔹 سپس، دو خوشهای که کمترین فاصله را دارند، به هم متصل میشوند.
🔹 این روند ادامه پیدا میکند تا همه نقاط در یک خوشه بزرگ قرار بگیرند.
برای این کار، باید دو فاکتور مهم را مشخص کنیم:
- روش محاسبه فاصله: ما از فاصله اُقلیدسی (Euclidean Distance) استفاده میکنیم.
- روش اتصال خوشهها: از روش Ward استفاده میکنیم که واریانس بین خوشهها را کمینه میکند.
🔗 الگوریتم Agglomerative Clustering
در این الگوریتم:
- ابتدا هر داده یک خوشه جداگانه است.
- نزدیکترین خوشهها را ترکیب میکنیم.
- این کار را ادامه میدهیم تا همه دادهها در یک خوشه قرار بگیرند.
💡 در واقع، نتیجه این فرآیند را میتوان بهصورت یک “درخت سلسلهمراتبی” یا “دندوگرام” (Dendrogram) نمایش داد که ساختار خوشهها را نشان میدهد.
📊 مثال عملی: خوشهبندی سلسلهمراتبی با Matplotlib و SciPy
🔹 گام 1: رسم دادهها
ابتدا تعدادی نقطه تصادفی را رسم میکنیم:
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()
🔹 نتیجه: نقاط داده روی یک نمودار پراکندگی نمایش داده میشوند.
🔹 گام 2: محاسبه دندوگرام با SciPy
اکنون از SciPy برای محاسبه و رسم دندوگرام استفاده میکنیم:
import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
data = list(zip(x, y))
linkage_data = linkage(data, method='ward', metric='euclidean')
dendrogram(linkage_data)
plt.show()
🔹 نتیجه: دندوگرام نشان میدهد که دادهها چگونه در مراحل مختلف به هم متصل شدهاند.
🧑💻 مثال عملی: خوشهبندی سلسلهمراتبی با Scikit-Learn
اکنون همان روش را با scikit-learn پیادهسازی میکنیم:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
data = list(zip(x, y))
hierarchical_cluster = AgglomerativeClustering(n_clusters=2, affinity='euclidean', linkage='ward')
labels = hierarchical_cluster.fit_predict(data)
plt.scatter(x, y, c=labels)
plt.show()
🔹 نتیجه: نقاط داده در دو گروه مختلف رنگآمیزی میشوند که نشاندهندهی دو خوشه مجزا هستند.
🎯 تحلیل کد و مفاهیم کلیدی
✅ ماژولهای موردنیاز
import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.cluster import AgglomerativeClustering
توضیحات:
🔹 NumPy: برای کار با آرایهها
🔹 Matplotlib: برای مصورسازی
🔹 SciPy: برای رسم دندوگرام
🔹 Scikit-Learn: برای اجرای خوشهبندی
✅ ایجاد دادههای نمونه
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))
🔹 نقاط داده را بهصورت جفتهای (x, y)
تعریف کردیم.
✅ اجرای الگوریتم با Ward Linkage
linkage_data = linkage(data, method='ward', metric='euclidean')
🔹 از Ward Linkage و فاصله اقلیدسی برای خوشهبندی استفاده شد.
✅ مصورسازی خوشهها
plt.scatter(x, y, c=labels)
plt.show()
🔹 نقاط براساس خوشههایشان رنگآمیزی میشوند.
📌 نتیجهگیری
✅ خوشهبندی سلسلهمراتبی یک روش قدرتمند برای گروهبندی دادهها است.
✅ دندوگرام کمک میکند تا تعداد بهینه خوشهها را انتخاب کنیم.
✅ استفاده از Ward Linkage و Euclidean Distance باعث خوشهبندی دقیقتر میشود.
✅ با Scikit-Learn میتوان خوشهبندی را روی دادههای بزرگتر نیز اجرا کرد.
💡 سوال برای شما:
اگر بخواهید تعداد خوشهها را ۳ انتخاب کنید، چه تغییری در کد باید ایجاد کنید؟ 🤔
✍ پاسختان را در کامنت بنویسید! ⬇️