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

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

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

نظرات

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

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