Python – خوشه‌بندی K-میانگین (K-means)

K-means Clustering

K-means یک روش یادگیری غیرنظارتی برای خوشه‌بندی داده‌ها است. این الگوریتم به طور تکراری داده‌ها را به KK خوشه تقسیم می‌کند تا واریانس در هر خوشه را کمینه کند.

در اینجا نحوه تخمین بهترین مقدار برای KK با استفاده از روش آرنج (Elbow Method) و سپس استفاده از خوشه‌بندی K-means برای گروه‌بندی نقاط داده به خوشه‌ها را نشان می‌دهیم.

چگونه کار می‌کند؟

  • تخصیص اولیه: هر نقطه داده به طور تصادفی به یکی از KK خوشه‌ها تخصیص داده می‌شود.
  • محاسبه مرکز خوشه: مرکز هر خوشه محاسبه می‌شود.
  • تخصیص مجدد: هر نقطه داده به خوشه‌ای با نزدیک‌ترین مرکز تخصیص داده می‌شود.
  • تکرار: این فرآیند تا زمانی که تخصیص خوشه‌ها برای هر نقطه داده تغییر نکند، تکرار می‌شود.

روش آرنج (Elbow Method)

برای انتخاب مقدار مناسب KK، از روش آرنج استفاده می‌کنیم که به ما امکان می‌دهد اینرشیای خوشه‌ها را برای مقادیر مختلف KK رسم کنیم و نقطه‌ای که در آن کاهش خطی آغاز می‌شود را شناسایی کنیم. این نقطه به عنوان “آرنج” شناخته می‌شود و معمولاً بهترین مقدار برای KK است.

مثال عملی

  1. نمایش داده‌ها

ابتدا داده‌های خود را به صورت نمودار پراکندگی نمایش می‌دهیم:

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()
  1. استفاده از روش آرنج

برای انتخاب مقدار مناسب KK، اینرشیای خوشه‌ها را برای مقادیر مختلف KK محاسبه کرده و نمودار آن را رسم می‌کنیم:

from sklearn.cluster import KMeans

data = list(zip(x, y))
inertias = []

for i in range(1, 11):
    kmeans = KMeans(n_clusters=i)
    kmeans.fit(data)
    inertias.append(kmeans.inertia_)

plt.plot(range(1, 11), inertias, marker='o')
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.show()

در نمودار، نقطه‌ای که اینرشیای خوشه‌ها کاهش خطی را نشان می‌دهد، به عنوان “آرنج” شناخته می‌شود و معمولاً نشان‌دهنده مقدار مناسب KK است.

  1. اعمال K-means

پس از تعیین مقدار مناسب KK، الگوریتم K-means را با مقدار انتخابی اجرا کرده و نتایج را نمایش می‌دهیم:

kmeans = KMeans(n_clusters=2)
kmeans.fit(data)

plt.scatter(x, y, c=kmeans.labels_)
plt.show()

توضیحات

وارد کردن ماژول‌ها: ابتدا ماژول‌های مورد نیاز را وارد می‌کنیم:

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
  • می‌توانید با ماژول Matplotlib در آموزش‌های مربوط به آن آشنا شوید و scikit-learn یکی از کتابخانه‌های محبوب یادگیری ماشین است.

  • ایجاد داده‌ها: داده‌ها به صورت آرایه‌های x و y تعریف شده‌اند و با هم ترکیب شده و به صورت نقاط داده‌ای در نظر گرفته می‌شوند:

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))
print(data)

نتیجه:

[(4, 21), (5, 19), (10, 24), (4, 17), (3, 16), (11, 25), (14, 24), (6, 22), (10, 21), (12, 21)]

پیدا کردن بهترین KK: برای یافتن بهترین مقدار KK، الگوریتم K-means را برای محدوده‌ای از مقادیر ممکن اجرا کرده و اینرشیای خوشه‌ها را برای هر مقدار رسم می‌کنیم:

inertias = []

for i in range(1, 11):
    kmeans = KMeans(n_clusters=i)
    kmeans.fit(data)
    inertias.append(kmeans.inertia_)

plt.plot(range(1, 11), inertias, marker='o')
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.show()

نتیجه: می‌توانیم ببینیم که “آرنج” در نمودار (جایی که اینرشیای خوشه‌ها به صورت خطی کاهش می‌یابد) در
K=2K=2

است. سپس الگوریتم K-means را دوباره با این مقدار اجرا کرده و خوشه‌های مختلف داده‌ها را رسم می‌کنیم:

kmeans = KMeans(n_clusters=2)
kmeans.fit(data)

plt.scatter(x, y, c=kmeans.labels_)
plt.show()

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - رویدادها (Events)

JavaScript – رویدادها (Events)

رویدادهای HTML رویدادها در HTML، “اتفاقاتی” هستند که برای عناصر HTML رخ می‌دهند. این اتفاقات می‌توانند ناشی از کار...

بیشتر بخوانید
JavaScript - سازنده‌های شیء (Object Constructors)

JavaScript – سازنده‌های شیء (Object Constructors)

ساخت آبجکت با تابع سازنده (Object Constructor Function) برای ساخت چندین آبجکت مشابه، از تابع سازنده استفاده می‌شود. این...

بیشتر بخوانید
JavaScript - نمایش شیء (Object Display)

JavaScript – نمایش شیء (Object Display)

نحوه نمایش آبجکت‌ها در جاوااسکریپت هنگام نمایش یک آبجکت جاوااسکریپت به صورت مستقیم، خروجی معمولاً به شکل [object Object]...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.