معرفی کاربردی برای جستجوی گرید، جستجوی تصادفی و جستجوی بیز

شکل ۱
شکل ۱
منتشر‌شده در towardsdatascience به تاریخ ۷ سپتامبر ۲۰۲۱
لینک منبع A Practical Introduction to Grid Search, Random Search, and Bayes Search

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

تنظیم هایپریپارامتری اساسا به تنظیم هایپریمتری مدل اشاره دارد، که اساسا یک فرآیند طول است. در این مقاله، سه تکنیک تنظیم ابرپارامتر را یاد خواهید گرفت: جستجوی شبکه‌ای، جستجوی تصادفی، و جستجوی بیز. این مقاله به صورت زیر ساختاربندی شده‌است:

۱. دریافت و آماده‌سازی داده‌ها

۲. جستجوی گرید

۳. جستجوی تصادفی

۴. جستجوی بیز

۵. نتیجه‌گیری

لطفا Notebook را برای مبدا کد بررسی کنید. آموزش‌های بیشتری از Github Repo در دسترس است.

۱. دریافت و آماده‌سازی داده

برای نشان دادن، ما از داده‌های داخلی سرطان پستان از Scikit Learn برای آموزش طبقه‌بندی بردار پشتیبان (SVC) استفاده می‌کنیم. می‌توانیم داده‌ها را با تابع load_breast_cancer بدست آوریم:

from sklearn.datasets import load_breast_cancercancer = load_breast_cancer()

سپس، بیایید df_X و df_y را برای ویژگی‌ها و برچسب هدف به شرح زیر ایجاد کنیم:

# Features
df_X = pd.DataFrame(cancer['data'], columns=cancer['feature_names'])# Target label
df_y = pd.DataFrame(cancer['target'], columns=['Cancer'])

پی‌نوشت: اگر می‌خواهید در مورد مجموعه داده بیشتر بدانید، می‌توانید برای چاپ خلاصه و اطلاعات مربوط به آن، print(cancer['DESCR']) را اجرا کنید.

پس از آن، بیایید مجموعه داده‌ها را به یک مجموعه آموزشی (۷۰٪) و یک مجموعه آزمون (۳۰٪) با استفاده از training_test_split() تقسیم کنیم:

# Train test split
from sklearn.model_selection import train_test_split
import numpy as npX_train, X_test, y_train, y_test = train_test_split(df_X, np.ravel(df_y), test_size=0.3)

ما یک مدل دسته‌بندی کننده بردار پشتیبانی (SVC) را آموزش خواهیم داد. پارامتر تنظیم‌کننده C و ضریب هسته gamma دو ابرپارامتر مهم در SVC هستند:

  • پارامتر تنظیم‌کننده C قدرت تنظیم را تعیین می‌کند.
  • ضریب هسته gamma عرض هسته را کنترل می‌کند. SVC به طور پیش‌فرض از کرنل تابع پایه شعاعی (RBF) استفاده می‌کند (همچنین به عنوان کرنل گاوسی شناخته می‌شود).

ما این دو پارامتر را در برنامه آموزشی زیر تنظیم خواهیم کرد.

۲. جستجوی گرید

پیدا کردن مقدار بهینه برای C و gamma دشوار است. ساده‌ترین راه‌حل این است که مجموعه‌ای از ترکیب‌ها را امتحان کنید و ببینید چه چیزی بهتر از همه جواب می‌دهد. این ایده ایجاد یک «گرید» از پارامترها و امتحان کردن تمام ترکیبات ممکن، جستجوی گرید یا شبکه‌ای نامیده می‌شود.

شکل ۲: جستجوی شبکه‌ای تمام ترکیبات ممکن را امتحان می‌کند
شکل ۲: جستجوی شبکه‌ای تمام ترکیبات ممکن را امتحان می‌کند

این روش به قدری رایج است که Scikit-learn این قابلیت را با GridSearchCV تعبیه کرده است. این CV به معنای اعتبار سنجی متقابل است که روش دیگری برای ارزیابی و بهبود مدل یادگیری ماشینی ما می‌باشد.

در اصل GridSearchCV یک فرهنگ لغت را انتخاب می‌کند که پارامترهایی که باید امتحان شوند و مدلی که باید آموزش داده شود را توصیف می‌کند. شبکه پارامترها به صورت یک فرهنگ لغت تعریف می‌شود، که در آن کلیدها پارامترها و مقادیر، تنظیماتی هستند که باید آزمایش شوند. بیایید در ابتدا کاندیدای خود C و gamma را به شرح زیر تعریف کنیم:

param_grid = {
'C': [0.1, 1, 10, 100, 1000],
'gamma': [1, 0.1, 0.01, 0.001, 0.0001]
}

سپس، اجازه دهید یک شی GridSearchCV ایجاد کنیم و آن را با داده‌های آموزشی تطبیق دهیم.

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVCgrid = GridSearchCV(SVC(), param_grid, refit=True, verbose=3)
grid.fit(X_train,y_train)

شکل ۳
شکل ۳

پس از تکمیل آموزش، می‌توانیم بهترین پارامترهای یافت‌شده توسط GridSearchCV در مشخصه best_params_ و بهترین تخمین‌گر در مشخصه best_estimator_ را بررسی کنیم:

# Find the best paramters
>>> grid.best_params_{'C': 1, 'gamma': 0.0001}# Find the best estimator
>>> grid.best_estimator_SVC(C=1, gamma=0.0001)

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

شکل ۴
شکل ۴

۳. جستجوی تصادفی

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

شکل ۵: جستجوی تصادفی سعی در ترکیب تصادفی دارد
شکل ۵: جستجوی تصادفی سعی در ترکیب تصادفی دارد

این روش نیز به اندازه کافی متداول است که Scikit-learn این قابلیت را با RandomizedSearchCV دارد. تابع API بسیار شبیه به GridSearchCV است.

ابتدا، پارامترهای C و توزیع‌های نمونه به شرح زیر را مشخص می‌کنیم:

import scipy.stats as stats
from sklearn.utils.fixes import loguniform# Specify parameters and distributions to sample from
param_dist = {
'C': stats.uniform(0.1, 1e4),
'gamma': loguniform(1e-6, 1e+1),
}

سپس، اجازه دهید یک شی RandomizedSearchCV با استدلال n_iter_search ایجاد کنیم و آن را با داده‌های آموزشی تطبیق دهیم.

n_iter_search = 20
random_search = RandomizedSearchCV(
SVC(),
param_distributions=param_dist,
n_iter=n_iter_search,
refit=True,
verbose=3
)
random_search.fit(X_train, y_train)

شکل ۶: مثالی از خروجی برازش RandomizedrchCV ()
شکل ۶: مثالی از خروجی برازش RandomizedrchCV ()

به طور مشابه، پس از اتمام آموزش، می‌توانیم بهترین پارامترهای یافت‌شده توسط RandomizedSearchCV در مشخصه best_params_ و بهترین تخمین زن در مشخصه best_estimator_ را بررسی کنیم:

>>> random_search.best_params_{'C': 559.3412579902997, 'gamma': 0.00022332416796205752}>>> random_search.best_estimator_SVC(C=559.3412579902997, gamma=0.00022332416796205752)

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

شکل ۷: پیش‌بینیRandomizedSearch chCV و تهیه گزارش
شکل ۷: پیش‌بینیRandomizedSearch chCV و تهیه گزارش

۴. جستجوی بیز

جستجوی بیز از تکنیک بهینه‌سازی بیزی برای مدل‌سازی فضای جستجو برای رسیدن به مقادیر بهینه پارامتر در سریع‌ترین زمان ممکن استفاده می‌کند. از ساختار فضای جستجو برای بهینه‌سازی زمان جستجو استفاده می‌کند. رویکرد جستجوی بیز از نتایج ارزیابی گذشته استفاده می‌کند تا نامزدهای جدیدی را انتخاب کند که به احتمال زیاد نتایج بهتری ارائه می‌دهند (در شکل زیر نشان‌داده شده‌است).

شکل ۸: جستجوی بیز
شکل ۸: جستجوی بیز

کتابخانه Scikit-Optimize با پیاده سازی BayesSearchCV همراه است.

ابتدا، پارامترهای C و gamma و توزیع‌ها را برای نمونه از موارد زیر مشخص کنید:

from skopt import BayesSearchCV
# parameter ranges are specified by one of below
from skopt.space import Real, Categorical, Integersearch_spaces = {
'C': Real(0.1, 1e+4),
'gamma': Real(1e-6, 1e+1, 'log-uniform'),
}

سپس، اجازه دهید یک شی BayesSearchCV را با استدلال n_iter_search ایجاد کنیم و آن را با داده‌های آموزشی تطبیق دهیم.

n_iter_search = 20
bayes_search = BayesSearchCV(
SVC(),
search_spaces,
n_iter=n_iter_search,
cv=5,
verbose=3
)
bayes_search.fit(X_train, y_train)

شکل ۹
شکل ۹

به طور مشابه، هنگامی که آموزش تکمیل شد، می‌توانیم بهترین پارامترهای یافت‌شده توسط BayesSearchCV در مشخصه best_params_ و بهترین تخمین‌گر در مشخصه best_estimator_ را بررسی کنیم:

>>> bayes_search.best_params_OrderedDict([('C', 0.25624177419852506), ('gamma', 0.00016576008531229226)])>>> bayes_search.best_estimator_SVC(C=0.25624177419852506, gamma=0.00016576008531229226)

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

شکل ۱۰
شکل ۱۰

۵. نتیجه‌گیری

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

به طور کلی، اگر تعداد ترکیبات به اندازه کافی محدود باشد، می‌توانیم از تکنیک جستجوی گرید استفاده کنیم. اما زمانی که تعداد ترکیبات افزایش می‌یابد، ما باید جستجوی تصادفی یا جستجوی بیز را امتحان کنیم زیرا آن‌ها از نظر محاسباتی گران نیستند.

امیدوارم این مقاله به شما کمک کند در وقت یادگیری ماشینی صرفه‌جویی کنید.

از خواندن شما متشکرم.

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