📚 সমস্ত অধ্যায় দেখুন
অধ্যায়/ফেজ 3 · Phase 3 · Advanced ML
3.3২০ মিনিট পড়া22 / 68

Hyperparameter Tuning — সঠিক knob ঘোরানো

Hyperparameter Tuning

GridSearch, RandomSearch, Optuna।

Hook — সঠিক knob ঘোরানো

একই recipe, কিন্তু আঁচ একটু কম-বেশি হলেই রান্নার স্বাদ পাল্টে যায়। ML model এর hyperparameter ঠিক সেই আঁচ — সঠিকভাবে tune করলে accuracy লাফিয়ে বাড়ে।

Parameter vs Hyperparameter

  • Parameter — model নিজে শেখে (weight, bias)।
  • Hyperparameter — আমরা train এর আগে set করি (learning_rate, max_depth, C)।

Search Strategies

  • Grid Search — সব combination, expensive কিন্তু exhaustive।
  • Random Search — random sample, large space এ বেশি কার্যকর।
  • Bayesian Optimization — past trial থেকে শিখে পরের point বেছে নেয় (Optuna, Hyperopt)।
  • Successive Halving — শুরুতে অনেক candidate, খারাপগুলো বাদ দিতে দিতে winner বের করে।

Code — Grid + Random Search

tune_basic.py
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
from scipy.stats import randint
from sklearn.datasets import load_wine

X, y = load_wine(return_X_y=True)

grid = {"n_estimators": [100, 300], "max_depth": [None, 5, 10]}
gs = GridSearchCV(RandomForestClassifier(random_state=0), grid, cv=5, n_jobs=-1)
gs.fit(X, y); print("Grid best:", gs.best_params_, gs.best_score_)

dist = {"n_estimators": randint(50, 500), "max_depth": randint(3, 20)}
rs = RandomizedSearchCV(RandomForestClassifier(random_state=0), dist,
                        n_iter=20, cv=5, random_state=0, n_jobs=-1)
rs.fit(X, y); print("Random best:", rs.best_params_, rs.best_score_)

Code — Optuna (Bayesian)

tune_optuna.py
import optuna
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_wine

X, y = load_wine(return_X_y=True)

def objective(trial):
    params = {
        "n_estimators": trial.suggest_int("n_estimators", 100, 600),
        "learning_rate": trial.suggest_float("learning_rate", 0.01, 0.3, log=True),
        "max_depth": trial.suggest_int("max_depth", 2, 8),
    }
    model = GradientBoostingClassifier(**params, random_state=0)
    return cross_val_score(model, X, y, cv=5).mean()

study = optuna.create_study(direction="maximize")
study.optimize(objective, n_trials=30)
print(study.best_params, study.best_value)

Common Mistakes

Big mistake

Test set এর উপর tune করা — leakage, real performance অনেক কম হবে।

  • Search space বড্ড বড় বা বড্ড ছোট রাখা।
  • Cross-validation না করে single split এ tune করা।

Mini Project — Optuna দিয়ে XGBoost tune

Phase 3 এর XGBoost চ্যাপ্টারের model এ Optuna দিয়ে ৫০ trial চালিয়ে best params বের করো — baseline এর সাথে compare।

Summary

এক নজরে

Random > Grid বেশিরভাগ সময়; Optuna = production winner।