۱ دانشجوی سون‌لرن
الگوریتم‌های خوشه بندی
جامعه هوش مصنوعی ایجاد شده در ۰۹ خرداد ۱۴۰۴

توی بحث الگوریتم‌های خوشه بندی هم میشه از grid serch cv برای انتخاب بهترین پارامتر استفاده کرد؟

 

سلام

بله، در بحث الگوریتم‌های خوشه‌بندی (Clustering) هم می‌توانید از رویکردی مشابه Grid Search برای انتخاب بهترین پارامترها استفاده کنید، اما تفاوت‌هایی با مدل‌های یادگیری با نظارت (Supervised) وجود دارد.

 

توضیح کامل:

۱. GridSearchCV چیست؟

GridSearchCV در Scikit-learn ابزاری برای جستجوی بهترین ترکیب پارامترها با کمک اعتبارسنجی متقابل (Cross Validation) است، اما این ابزار به طور پیش‌فرض برای مدل‌های با نظارت (مثل طبقه‌بندی و رگرسیون) طراحی شده، چون در این مدل‌ها معیار ارزیابی (مانند accuracy یا mse) بر اساس مقایسه پیش‌بینی مدل با برچسب‌های واقعی داده‌هاست.

۲. چالش در خوشه‌بندی

در خوشه‌بندی معمولاً برچسب واقعی نداریم (unsupervised)، پس معیار ارزیابی باید بدون نیاز به برچسب واقعی باشد.
برای این کار از شاخص‌های داخلی مثل:

  • Silhouette score
  • Calinski-Harabasz Index
  • Davies-Bouldin Index
    و … استفاده می‌شود.

۳. راهکار: استفاده از GridSearch-like Approach

  • شما می‌توانید یک حلقه (Loop) یا تابع مشابه GridSearch بنویسید که الگوریتم خوشه‌بندی را با پارامترهای مختلف اجرا کند و بر اساس شاخص داخلی (مثلاً Silhouette) بهترین پارامتر را انتخاب کند.
  • حتی می‌توانید از GridSearchCV هم استفاده کنید، ولی باید یک اسکور فانکشن مناسب تعریف کنید که فقط به داده‌های X (بدون y) نیاز داشته باشد.

۴. نمونه کد عملی (مثال با KMeans و Silhouette):

               python                    

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import numpy as np
best_score = -1
best_k = None
for k in range(2, 11):  # آزمایش تعداد خوشه‌های مختلف
    kmeans = KMeans(n_clusters=k, random_state=42)
    cluster_labels = kmeans.fit_predict(X)
    score = silhouette_score(X, cluster_labels)
    print(f'k={k}: silhouette score={score:.3f}')
    if score > best_score:
        best_score = score
        best_k = k
print(f'Best k: {best_k} with silhouette score: {best_score:.3f}')

           

۵. استفاده از GridSearchCV با scorer سفارشی

اگر بخواهید حتماً از GridSearchCV استفاده کنید، باید یک scorer بنویسید که فقط به X نیاز داشته باشد:

               python                    

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import make_scorer
def silhouette_scorer(estimator, X):
    labels = estimator.fit_predict(X)
    return silhouette_score(X, labels)
param_grid = {'n_clusters': range(2, 11)}
grid = GridSearchCV(KMeans(random_state=42), param_grid, scoring=make_scorer(silhouette_scorer), cv=[(slice(None), slice(None))])
grid.fit(X)
print(grid.best_params_)

 

مسعود کاویانی ۲۹ تیر ۱۴۰۴، ۲۱:۱۸