از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
تصادفی جستجوی CV با XGBoost در خط لوله Scikit-Learn
RandomizedSearchCV
و GridSearchCV
به شما این امکان را می دهد که تنظیم هایپرپارامتر را با Scikit-Learn انجام دهید، جایی که اولی به طور تصادفی در آن جستجو می کند. مقداری تنظیمات (دیکته شده توسط n_iter
) در حالی که دومی در همه آنها جستجو می کند.
XGBoost کتابخانهای است که به طور فزایندهای مسلط است که پسروندهها و طبقهبندیکنندههای آن نسبت به پیادهسازیهای سنتیتر معجزه میکنند و مبتنی است. روی یک نسخه افراطی از تقویت گرادیان.
این به خوبی با Scikit-Learn بازی می کند و مدل های آن را می توان در بیشتر موارد به جای مدل های Scikit-Learn استفاده کرد.
در این بایت – شما یک مثال سرتاسری از خط لوله Scikit-Learn برای مقیاس بندی داده ها، متناسب با XGBoost پیدا خواهید کرد. XGBRegressor
و سپس تنظیم هایپرپارامتر را با Scikit-Learn انجام دهید RandomizedSearchCV
.
ابتدا، بیایید یک عملکرد پایه از یک خط لوله ایجاد کنیم:
import sklearn
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.pipeline import Pipeline
from xgboost import XGBRegressor
X, y = datasets.fetch_california_housing(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y)
pipeline = Pipeline((('scaler', MinMaxScaler()), ('regressor', XGBRegressor())))
pipeline.fit(X_train, y_train)
بیایید به آن امتیاز دهیم:
pipeline.score(X_test, y_test)
عالی، امتیاز R2 0.77! بیایید تنظیم هایپرپارامتر را انجام دهیم روی خط لوله شما می توانید با استفاده از نام آنها در خط لوله با به هر عنصر خط لوله دسترسی داشته باشید تا خصوصیات آنها را تنظیم کنید __
. اگر از نام ها مطمئن نیستید، همیشه می توانید همه پارامترهای قابل تنظیم را به صورت زیر دریافت کنید:
pipeline.get_params().keys()
بیایید یک شبکه هایپرپارامتر بسازیم و جستجو را مقداردهی اولیه کنیم:
hyperparameter_grid = {
'regressor__n_estimators': (100, 500, 1000, 2000),
'regressor__max_depth': (3, 6, 9, 12),
'regressor__learning_rate': (0.01, 0.03, 0.05, 0.1)
}
random_cv = sklearn.model_selection.RandomizedSearchCV(estimator=pipeline,
param_distributions=hyperparameter_grid,
cv=3,
n_iter=5,
scoring = 'neg_root_mean_squared_error',
n_jobs = -1,
verbose = 5,
return_train_score = True,
random_state=42)
random_cv.fit(X_train, y_train)
جستجو کمی زمان می برد و به چیزی در مسیر زیر منجر می شود:
Fitting 3 folds for each of 5 candidates, totalling 15 fits
RandomizedSearchCV(cv=3,
estimator=Pipeline(steps=(('scaler', MinMaxScaler()),
('regressor', XGBRegressor()))),
n_iter=5, n_jobs=-1,
param_distributions={'regressor__learning_rate': (0.01, 0.03,
0.05,
0.1),
'regressor__max_depth': (3, 6, 9, 12),
'regressor__n_estimators': (100, 500,
1000,
2000)},
random_state=42, return_train_score=True,
scoring='neg_root_mean_squared_error', verbose=5)
پس از انجام جستجو، می توانید بهترین خط لوله پیکربندی شده را با استفاده از:
best_pipe = random_cv.best_estimator_
یا آن را بررسی کنید:
best_pipe
در نهایت، اجازه دهید آن را برای مرجع نمره گذاری کنیم:
best_pipe.score(X_test, y_test)
عالی است، ما امتیاز را افزایش داده ایم 0.77
به 0.83
از طریق یک جستجوی ساده و کوتاه!
توجه داشته باشید: نکن score()
را random_cv
شی، بلکه بهترین خط لوله یافت شده است.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-05 18:26:03