وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

تصادفی جستجوی CV با XGBoost در خط لوله Scikit-Learn

0 2
زمان لازم برای مطالعه: 2 دقیقه


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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید