نحوه استفاده از Sklearn GridSearchCV (با مثال پایتون)

GridSearchCV یک است تکنیک تنظیم فراپارامتر در یادگیری ماشین برای انجام بهینه سازی مدل استفاده می شود. به طور خاص، کلاسی از Scikit-learn’s است model_selection ماژول برای انجام اعتبارسنجی متقابل برای یافتن بهترین پارامترها برای یک مدل معین و معیارهای عملکرد تعریف شده استفاده می شود.

تنظیم فراپارامتر به فرآیند انتخاب فراپارامترهای بهینه برای بهینه سازی الگوریتم یادگیری ماشین مربوط می شود.

هدف اصلی از GridSearchCV ارزیابی تمام ترکیبات ممکن از پارامترهای مشخص شده برای یک برآوردگر و بهینه سازی عملکرد آن است. به زبان ساده، GridSearchCV ابرپارامترهای مختلف را آزمایش می کند تا بهترین را برای مدل شما پیدا کند.

Cross-Validation چیست؟

اعتبار سنجی متقاطع، که به عنوان CV نیز شناخته می شود، روشی است که برای انتخاب پارامترهای مدل به گونه ای استفاده می شود که بیش از حد به مجموعه آموزشی اولیه متکی نباشد. برای استفاده به عنوان یک مجموعه اعتبار سنجی، بخشی از داده های آموزشی را نگه می دارد.

نحوه استفاده از Sklearn GridSearchCV (با مثال پایتون)
دانشگاه کردیت استنفورد

یکی از متداول‌ترین روش‌های CV، اعتبارسنجی متقاطع k-fold است. GridSearchCV از اعتبارسنجی متقاطع k برابر برای کشف بهترین ترکیب ممکن استفاده می کند.

K-Fold Cross-Validation

با توجه به دانشگاه استنفورد، K-Fold Cross-Validation با تقسیم داده ها به زیر مجموعه های K (همچنین به عنوان folds شناخته می شود) کار می کند. برای هر i = 1, . . . , K، مدل قطار روی همه به جز i’th تا زدن سپس خطای تست را بر روی آن محاسبه می کند i’th خطاهای تست را تا بزنید و میانگین بگیرید.

برای نشان دادن بهتر این فرآیند، تجسم زیر نشان می‌دهد که برای تعدادی از تقسیم‌ها (یا پارامتر)، اعتبارسنجی متقاطع از یکی از تاها برای آزمایش یک پارامتر و محاسبه یک متریک خطای تست (مثلاً دقت، دقت، امتیاز f1،…) استفاده می‌کند. ). سپس از فولد بعدی استفاده می کند و محاسبه مشابهی انجام می دهد و غیره. در نهایت معیارها را برای یافتن پارامترهای بهینه میانگین می گیرد.

مبانی اعتبار سنجی متقابل

اعتبار سنجی متقابل در GridSearchCV

GridSearchCV اعتبار متقاطع را با دنبال کردن مراحل زیر انجام می دهد:

  • GridSearchCV داده های آموزشی را به k قسمت مساوی تقسیم می کند.
  • هر فولد به عنوان یک مجموعه اعتبار سنجی و بقیه به عنوان آموزش استفاده می شود
  • برای هر ترکیبی از فراپارامترها، اعتبارسنجی متقاطع (مثلاً با KFold) انجام دهید.
  • بهترین هایپرپارامترها را بر اساس میانگین عملکرد در سراسر تاهای اعتبار سنجی متقاطع برگردانید.

تصویر زیر بهترین ها را نشان می دهد n_neighbors مقدار پارامتر برای a KNearestNeighbor الگوریتم

gridsearchcv در knn

بهترین معیارهای عملکرد GridSearchCV چیست؟

معیارهای عملکرد مناسب برای ارزیابی در GridSearchCV به مدلی که استفاده می کنید، مجموعه داده و زمینه پروژه یادگیری ماشین بستگی دارد. GridSearchCV تعدادی معیار مانند دقت، دقت و فراخوان را ارائه می دهد. هر متریک یا ترکیبی از معیارها کاربرد خاص خود را دارد و باید هنگام مدل‌سازی داده‌های شما مورد توجه قرار گیرد.

GridSearchCV با مثال پایتون

در این مثال GridSearchCV با پایتون، یک کار طبقه‌بندی را روی مجموعه داده سرطان پستان موجود در Scikit-learn انجام خواهیم داد. ما از KNN برای پیش‌بینی سرطان‌های بدخیم یا خوش‌خیم استفاده خواهیم کرد و این کار را با استفاده از GridSearchCV برای یافتن بهترین‌ها انجام می‌دهیم. n_neighbors مقدار پارامتر برای مجموعه داده ما.

شروع به کار

$ pip3 install -U scikit-learn

مجموعه داده را بارگیری و کاوش کنید

from sklearn.datasets import load_breast_cancer
import pandas as pd

dataset = load_breast_cancer()
df = pd.DataFrame(dataset.data, columns=dataset.feature_names)
df['target'] = pd.Series(dataset.target)
df.head()

نمایش ویژگی ها و اهداف

print('Features:', dataset.feature_names)
print('Targets:', dataset.target_names)

داده ها را به صورت آرایه دریافت کنید

X = dataset.data
y = dataset.target

مجموعه داده را به مجموعه های آموزشی و آزمایشی تقسیم کنید

ما از train_test_split از sklearn.model_selection برای تقسیم داده ها به داده های آموزشی و آزمایشی استفاده خواهیم کرد.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

نمونه سازی مدل یادگیری ماشین KNN

ما کلاس KNN را از sklearn.neighbors بدون هیچ پارامتری نمونه سازی می کنیم.

from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier()

تعریف شبکه پارامتر

# Defining the parameter grid
param_grid = {
    'n_neighbors': [3, 5, 7, 9],   # Trying different 'k' n_neighbors values
}

# Set up GridSearchCV
knn_cv = GridSearchCV(
            knn, 
            param_grid, 
            cv=5, 
            scoring='accuracy'
        )

آموزش مدل ها

knn_cv.fit(X_train, y_train)

بهترین پارامترها و امتیاز را پیدا کنید

print(f"Best parameters: {knn_cv.best_params_}")
print(f"Best cross-validated accuracy: {knn_cv.best_score_:.2f}")

بهترین مدل را در مجموعه تست ارزیابی کنید

best_knn = knn_cv.best_estimator_ # model that performed best
y_pred = best_knn.predict(X_test)
test_accuracy = best_knn.score(X_test, y_test)

print(f"Test set accuracy: {test_accuracy:.2f}")

مقیاس پذیری GridSearchCV

GridSearchCV عملی است که مقیاس آن خیلی خوب نیست. GridSearchCV نیاز به حلقه زدن از طریق هر امکان از پیش تعریف شده شبکه و آموزش یادگیری ماشین بر روی هر یک از پارامترهای ممکن دارد.

این یک مشکل ایجاد می کند زیرا با افزایش تعداد تاها و تعداد پارامترها، تعداد برازش هایی که باید انجام شوند به صورت تصاعدی افزایش می یابد. این نموداری است که نشان می‌دهد چگونه برازش‌های 10 برابری CV مورد نیاز تنها با 7 فراپارامتر به شدت رشد می‌کند.

number_values_per_parameter ** number_parameters * number_of_folds
5 ** 7 * 10 = 781250 fits

تصادفی CV جستجو برای نجات

یک جایگزین استفاده است RandomizedSearchCV از sklearn.model_selection.
از sklearn.model_selection import RandomizedSearchCV

from sklearn.model_selection import RandomizedSearchCV

# Instantiate
knn = KNeighborsClassifier()

 #Set parameter grid
param_grid = {
    'n_neighbors': np.arange(1, 50)   
}

# Set up RandomizedSearchCV
random_search = RandomizedSearchCV(
    knn, 
    param_grid, 
    n_iter=10,  # Limit the number of iterations (10 combinations)
    cv=5,  # 5-fold cross-validation
    scoring='accuracy',  # You can use 'precision', 'recall', or 'f1' here for different use cases
    random_state=42
)

# Fit the model
random_search.fit(X_train, y_train)

# Find the best parameters and score
print(f"Best parameters: {random_search.best_params_}")
print(f"Best cross-validated accuracy: {random_search.best_score_:.2f}")

# Evaluate the best model on the test set
best_knn = random_search.best_estimator_
test_accuracy = best_knn.score(X_test, y_test)

print(f"Test set accuracy: {test_accuracy:.2f}")

مزایا و چالش های GridSearchCV

  • مزیت اصلی استفاده از GridSearchCV بهبود عملکرد مدل است. این پارامترها را به دقت تنظیم می کند، که منجر به پیش بینی بهتر در داده های دیده نشده می شود.
  • اثربخشی GridSearchCV به اندازه مجموعه داده، تعداد فراپارامترها و منابع محاسباتی موجود بستگی دارد.

چه زمانی به جای KFold و cross_val_score از GridSearchCV استفاده کنیم؟

شما باید استفاده کنید GridSearchCV به جای KFold و cross_val_score زمانی که شما نه تنها به دنبال ارزیابی یک مدل هستید، بلکه می خواهید هایپرپارامترها را نیز تنظیم کنید تا بهترین ترکیب را برای مدل خود پیدا کنید.

این برای آموزش ما در مورد GridSearchCV با Sklearn است.

Source link