Chapter 4 of 16
Every knob that matters, for every model you'll actually use
এই chapter-এ সব ধারণা concrete হবে। সবচেয়ে বেশি ব্যবহৃত classical machine learning model family-গুলোর জন্য কোন hyperparameter কী করে, কীভাবে tune করতে হয়, আর কোন ভুলগুলো practitioners বারবার করেন — সবটা এক জায়গায়।
পুরোটা মুখস্থ করার দরকার নেই। Reference হিসেবে ব্যবহার করুন। যে model tune করতে যাচ্ছেন তার section খুঁজে পড়ুন। যা মনে রাখার যোগ্য সেটা হলো বারবার দেখা pattern — বেশিরভাগ model family-তে একটা-দুটো hyperparameter dominant (সাধারণত model capacity সম্পর্কিত), বাকিগুলো secondary।
Plain linear regression-এ (ordinary least squares দিয়ে fit) HPO অর্থে কোনো hyperparameter নেই — optimal weight-এর closed-form সমাধান আছে। এর regularized variant-গুলো প্রথম hyperparameter introduce করে।
| Hyperparameter | Default (sklearn) | Effect |
|---|---|---|
| alpha (λ) | 1.0 | Ridge/Lasso/ElasticNet-এর regularization strength। বেশি মানে coefficient বেশি shrink হয়, bias বাড়ে, variance কমে। |
| l1_ratio (ElasticNet) | 0.5 | L1 (Lasso, sparsity) আর L2 (Ridge, smooth shrink) balance করে। 0 = pure Ridge, 1 = pure Lasso। |
| C (LogisticRegression) | 1.0 | Inverse regularization strength — C = 1/α। বেশি C মানে কম regularization (বেশি complex model)। |
| penalty | 'l2' | Regularization type। 'l2' (Ridge-style), 'l1' (Lasso-style), 'elasticnet', বা 'none'। |
alpha (বা C) সবসময় log scale-এ search করুন — যেমন থেকে । কারণ এর effect multiplicative, additive নয়। 1 থেকে 10-এর linear grid বাজে range-এ বেশিরভাগ budget নষ্ট করে।
alpha-কে 1, 2, 3, ..., 10-এর মতো linear তালিকায় search করা প্রায় সবসময় ভুল। Log-uniform spacing ব্যবহার করুন।
Decision tree হলো সবচেয়ে বেশি hyperparameter-sensitive model গুলোর একটা। Default setting প্রায়ই হয় wild overfitting নয়তো frustrating underfitting।
| Hyperparameter | Default | Effect |
|---|---|---|
| max_depth | None (unlimited) | Root থেকে leaf পর্যন্ত সর্বোচ্চ split সংখ্যা। সবচেয়ে গুরুত্বপূর্ণ capacity control — unlimited দিলে severe overfitting। |
| min_samples_split | 2 | Node split করার জন্য minimum sample। বেশি হলে conservative split, bias বাড়ে, variance কমে। |
| min_samples_leaf | 1 | Leaf-এ minimum sample। 1-এর বেশি দিলে tree individual training point fit করতে পারে না। |
| max_features | None | প্রতিটা split-এ বিবেচিত feature সংখ্যা। কমালে randomness আসে — Random Forest-এর diversity-র চাবিকাঠি। |
| criterion | 'gini' | Split quality measure। 'gini' আর 'entropy' practice-এ similar — tune করার মূল্য কম। |
শুরু করুন 3 থেকে 20 range-এ max_depth দিয়ে। ভালো depth পাওয়ার পর overfitting কমাতে min_samples_leaf দিয়ে experiment করুন। বাকি hyperparameter সাধারণত secondary।
Ensemble method-গুলো decision tree-এর সব hyperparameter inherit করে এবং নিজস্ব ensemble-level control যোগ করে।
| Hyperparameter | Default | Effect |
|---|---|---|
| n_estimators | 100 | Ensemble-এর tree সংখ্যা। বেশি tree প্রায় সবসময় ভালো (diminishing return), কিন্তু cost linear। 100 থেকে 1000+-এ search করুন। |
| max_depth | None | Tree depth। Random Forest-এ unlimited depth আংশিক averaging-এ compensate হয়; Gradient Boosting-এ shallow tree (3-8) সাধারণত optimal। |
| max_features (RF) | sqrt(n_features) | প্রতিটা split-এ বিবেচিত feature। Ensemble diversity control করে। |
| learning_rate (GBM) | 0.1 | প্রতিটা tree কতটা contribute করে। কম মানে বেশি tree লাগে কিন্তু প্রায়ই ভালো generalization। Log-uniform 0.001-0.3। |
| subsample (GBM) | 1.0 | প্রতিটা tree-এ training data-র fraction। <1.0 regularization আনে আর training দ্রুত করে। |
| min_samples_leaf / min_child_weight | 1 | Minimum leaf size। বাড়ালে RF আর GBM উভয়েই effective regularization। |
এই ক্রমে tune করুন: (1) early stopping দিয়ে n_estimators, (2) learning_rate আর n_estimators একসাথে — কম LR প্রায়ই বেশি estimator চায়, (3) capacity-র জন্য max_depth আর min_child_weight, (4) regularization-এর জন্য subsample আর colsample_bytree।
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV
from sklearn.datasets import load_breast_cancer
X, y = load_breast_cancer(return_X_y=True)
rf_param_dist = {
"n_estimators": [100, 200, 400, 800],
"max_depth": [3, 5, 8, 12, None],
"min_samples_leaf": [1, 2, 5, 10],
"max_features": ["sqrt", "log2", 0.5],
}
rf_search = RandomizedSearchCV(
RandomForestClassifier(random_state=42),
param_distributions=rf_param_dist,
n_iter=30, cv=5, scoring="roc_auc",
random_state=42, n_jobs=-1,
)
rf_search.fit(X, y)
print(f"Best RF params: {rf_search.best_params_}")
print(f"Best RF AUC: {rf_search.best_score_:.4f}")SVM-এর hyperparameter সংখ্যায় কম কিন্তু tightly coupled। ভুল করা সহজ।
| Hyperparameter | Default | Effect |
|---|---|---|
| C | 1.0 | Regularization inverse (logistic regression-এর মতো)। বেশি C মানে tighter training fit, overfitting risk বেশি। |
| kernel | 'rbf' | Kernel function। 'linear', 'rbf', 'poly', 'sigmoid'। Categorical hyperparameter যা decision boundary-র geometry সম্পূর্ণ বদলে দেয়। |
| gamma (rbf/poly/sigmoid) | 'scale' | একটা training example-এর influence কতদূর পৌঁছায়। High gamma → local boundary (overfitting risk)। Low gamma → smooth boundary। |
| degree (poly) | 3 | Polynomial degree। শুধু kernel='poly'-তে। বেশি degree → বেশি capacity → overfitting risk। |
C আর gamma RBF kernel-এ strongly interact করে। High-C, low-gamma একটা configuration, low-C, high-gamma অন্য কিছু — শুধু একটা দেখে বলা যায় না কোনটা ভালো। সবসময় দুটো একসাথে 2D log-log grid-এ search করুন।
KNN non-parametric — traditional অর্থে কোনো model parameter নেই, তাই সব choice-ই hyperparameter।
| Hyperparameter | Default | Effect |
|---|---|---|
| n_neighbors (k) | 5 | কতজন neighbor দেখা হবে। Primary capacity control: k=1 মানে training set মুখস্থ; বড় k মানে smooth boundary। |
| weights | 'uniform' | 'uniform': সব neighbor সমান vote করে। 'distance': কাছের neighbor বেশি influence পায়। |
| metric | 'minkowski' | Distance metric। 'euclidean' (p=2) standard। High-dimensional বা sparse data-তে 'cosine' বা 'manhattan'। |
| p | 2 | Minkowski metric-এর power। p=1 = Manhattan, p=2 = Euclidean। |
KNN সরাসরি feature vector-এর মধ্যে distance হিসাব করে — হাজারের unit-এর একটা feature single digit-এর আরেকটাকে dominate করে। KNN hyperparameter tune করার আগে সবসময় feature standardize করুন।
যে model-ই tune করুন না কেন, এই workflow সাধারণত ভালো কাজ করে:
Baseline স্থাপন করুন
Default hyperparameter দিয়ে train করুন আর validation performance মাপুন। এটাই শুরুর বিন্দু।
Primary capacity hyperparameter চিহ্নিত করুন
বেশিরভাগ model-এ একটা dominant hyperparameter থাকে (tree-তে max_depth, SVM-এ C)। আগে এটা coarse grid-এ tune করুন।
Regularization control যোগ করুন
Capacity মোটামুটি ঠিক হলে regularization hyperparameter (min_samples_leaf, subsample, alpha) tune করুন।
Automated search দিয়ে joint search করুন
RandomizedSearchCV বা Bayesian optimization দিয়ে সবচেয়ে গুরুত্বপূর্ণ hyperparameter একসাথে search করুন।
Lock করুন আর evaluate করুন
সেরা configuration fix করুন, পুরো training set-এ retrain করুন, test set-এ report করুন।