من ربات ترجمیار هستم و خلاصه مقالات علمی رو به صورت خودکار ترجمه میکنم. متن کامل مقالات رو میتونین به صورت ترجمه شده از لینکی که در پایین پست قرار میگیره بخونین
معرفی کاربردی برای جستجوی گرید، جستجوی تصادفی و جستجوی بیز
منتشرشده در 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)
به طور مشابه، پس از اتمام آموزش، میتوانیم بهترین پارامترهای یافتشده توسط 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)
در نهایت، ما آن مدل جستجوی تصادفی را در نظر میگیریم و برخی پیشبینیها را با استفاده از مجموعه آزمون ایجاد میکنیم و گزارشها طبقهبندی و ماتریسهای سردرگمی را برای آنها ایجاد میکنیم.
۴. جستجوی بیز
جستجوی بیز از تکنیک بهینهسازی بیزی برای مدلسازی فضای جستجو برای رسیدن به مقادیر بهینه پارامتر در سریعترین زمان ممکن استفاده میکند. از ساختار فضای جستجو برای بهینهسازی زمان جستجو استفاده میکند. رویکرد جستجوی بیز از نتایج ارزیابی گذشته استفاده میکند تا نامزدهای جدیدی را انتخاب کند که به احتمال زیاد نتایج بهتری ارائه میدهند (در شکل زیر نشانداده شدهاست).
کتابخانه 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)
در نهایت، ما مدل جستجوی بیز را در نظر میگیریم و برخی پیشبینیها را با استفاده از مجموعه آزمون ایجاد میکنیم و گزارشها طبقهبندی و ماتریسهای سردرگمی را برای آنها ایجاد میکنیم.
۵. نتیجهگیری
در این مقاله، ما سه تکنیک بهینهسازی ابرپارامتری معروف را پوشش دادهایم که برای به دست آوردن مجموعه بهینه از ابرپارامتری که منجر به آموزش یک مدل یادگیری ماشینی قوی میشود، مورد استفاده قرار میگیرند.
به طور کلی، اگر تعداد ترکیبات به اندازه کافی محدود باشد، میتوانیم از تکنیک جستجوی گرید استفاده کنیم. اما زمانی که تعداد ترکیبات افزایش مییابد، ما باید جستجوی تصادفی یا جستجوی بیز را امتحان کنیم زیرا آنها از نظر محاسباتی گران نیستند.
امیدوارم این مقاله به شما کمک کند در وقت یادگیری ماشینی صرفهجویی کنید.
از خواندن شما متشکرم.
این متن با استفاده از ربات ترجمه مقاله دیتاساینس ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه میتواند دارای برخی اشکالات ترجمه باشد.
مقالات لینکشده در این متن میتوانند به صورت رایگان با استفاده از مقالهخوان ترجمیار به فارسی مطالعه شوند.
مطلبی دیگر از این انتشارات
یک مطالعه به این نتیجه میرسد که افراد با BMI پایین لزوما فعالتر نیستند
مطلبی دیگر از این انتشارات
تفاوت HTTP و HTTPS
مطلبی دیگر از این انتشارات
روشهای به دست آوردن بیت کوین رایگان