tgoop.com/pytorch_howsam/487
Create:
Last Update:
Last Update:
سلام
در مسابقههای کگل، مدلهای CatBoost LightGBM XGBoost خیلی محبوب هستند. هر سه مدل از خانواده بوستینگ (Boosting) هستند. این سه عزیز در سایکیتلرن وجود ندارند و هرکدام برای خودشان یک لایبرری جداگانه دارند که باید با pip نصب شوند. کار سادهای هست. اتفاقا استفاده از آنها هم خیلی ساده هست. چون شبیه سایکیتلرن هستند و همان fit و predict را دارند. حالا حرفمان در این پست چیست؟
این مدلها هایپرپارامترهای بسیار زیادی دارند؛ خیلیها میگویند:
در این مدلها باید هایپرپارمترها رو دقیق تنظیم کنی وگرنه قدرت واقعیشون رو نمیبینی.
حالا ما هم میخواهیم درمورد همین تنظیم هایپرپارامترها صحبت کنیم...
دو نکته را مدنظر داشته باشید:
اول اینکه، باید تئوری این مدلها را بدانید. تئوری اینها وابسته به دو بحث مدلهای درخت تصمیم (Decision Trees) و بوستینگ (Boosting) هست. اگه اینها را بدانید، قطعا درک بهتری نسبت به هایپرپارامترها خواهید داشت.
دوم اینکه، در کگل برای تنظیم هایپرپارامترها از لایبرریهای جانبی مثل Optuna بهره میبرند. با این لایبرری میتوانیم یک Grid Search بسازیم تا هایپرپارامترهای مناسب را پیدا کنیم. در ادامه، یک مثال از نحوه ترکیب Optuna با LGBMClassifier را آوردیم...
import lightgbm as lgb
import optuna
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# Load dataset
X, y = load_iris(return_X_y=True)
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)
# Define objective function
def objective(trial):
params = {
'objective': 'multiclass',
'num_class': 3,
'metric': 'multi_logloss',
'verbosity': -1,
'boosting_type': 'gbdt',
'learning_rate': trial.suggest_float('learning_rate', 0.001, 0.1),
'max_depth': trial.suggest_int('max_depth', 2, 10),
'num_leaves': trial.suggest_int('num_leaves', 2, 100),
}
model = lgb.LGBMClassifier(**params)
model.fit(X_train, y_train)
preds = model.predict_proba(X_valid)
log_loss = lgb.log_loss(y_valid, preds)
return log_loss
# Run optimization
study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=100)
# Get best hyperparameters
best_params = study.best_params
print("Best hyperparameters:", best_params)
در کد بالا، سه هایپرپارامتر learning_rate max_depth num_leaves را به Optuna دادهایم تا از بازه تعریف شده یک عدد انتخاب کند و میزان خطای مدل را حساب کند. ما به دنبال حالتی هستیم که کمترین خطای ممکن حاصل شود. 100 بار انتخاب هایپرپارامترها بهصورت رندوم انجام میشود و نهایتا بهترین هایپرپارامتر براساس کمترین خطا گزارش میشود.
@pytorch_howsam
BY PyTorch Howsam
Share with your friend now:
tgoop.com/pytorch_howsam/487