Cum să optimizezi hiperparametrii — Complete Guide
DodaTech
Updated 2025-01-15
2 min read
In this tutorial, you'll learn how to optimize model hyperparameters using GridSearchCV and RandomizedSearchCV in sklearn, finding the best configuration automatically and efficiently.
Problema
Setările implicite ale unui model rareori dau cele mai bune rezultate. Ajustarea manuală a hiperparametrilor e lentă, ineficientă și deseori ratează combinații bune. Ai nevoie de o căutare sistematică.
Soluția Greșită
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
df = pd.read_csv("date.csv")
X = df.drop("target", axis=1)
y = df["target"]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
# Ajustare manuala — incet si ineficient
model = RandomForestClassifier(n_estimators=100, max_depth=5)
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
Problema: Schimbi un parametru, rulezi, verifici, mai schimbi... Pierzi ore întregi și găsești rar optimul global.
Soluția Corectă
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
df = pd.read_csv("date.csv")
X = df.drop("target", axis=1)
y = df["target"]
param_grid = {
"n_estimators": [50, 100, 200],
"max_depth": [5, 10, None],
"min_samples_split": [2, 5, 10]
}
grid = GridSearchCV(
RandomForestClassifier(random_state=42),
param_grid,
cv=5,
scoring="accuracy",
n_jobs=-1,
verbose=1
)
grid.fit(X, y)
print(f"Ce mai buni parametri: {grid.best_params_}")
print(f"Cel mai bun scor: {grid.best_score_:.3f}")
Output:
Fitting 5 folds for each of 27 candidates, totalling 135 fits
Ce mai buni parametri: {'max_depth': 10, 'min_samples_split': 2, 'n_estimators': 200}
Cel mai bun scor: 0.927
Implementare Pas cu Pas
1. GridSearchCV — căutare exhaustivă
from sklearn.ensemble import GradientBoostingClassifier
param_grid = {
"learning_rate": [0.01, 0.05, 0.1],
"n_estimators": [50, 100, 200],
"max_depth": [3, 4, 5]
}
grid = GridSearchCV(
GradientBoostingClassifier(random_state=42),
param_grid,
cv=5,
scoring="roc_auc",
n_jobs=-1
)
grid.fit(X_train, y_train)
print(grid.best_params_)
2. RandomizedSearchCV — căutare mai rapidă
from sklearn.model_selection import RandomizedSearchCV
import numpy as np
param_dist = {
"n_estimators": [50, 100, 200, 300, 500],
"max_depth": [3, 5, 8, 10, 15, None],
"min_samples_split": [2, 5, 10, 20],
"min_samples_leaf": [1, 2, 4, 8]
}
random_search = RandomizedSearchCV(
RandomForestClassifier(random_state=42),
param_dist,
n_iter=30,
cv=5,
scoring="accuracy",
n_jobs=-1,
random_state=42
)
random_search.fit(X_train, y_train)
print(random_search.best_params_)
3. Analizează rezultatele
results = pd.DataFrame(grid.cv_results_)
print(results[["params", "mean_test_score", "std_test_score"]].head(10))
Sfaturi pentru Prevenire
- Începe cu RandomizedSearchCV pentru a explora un spațiu larg
- Folosește GridSearchCV când ai puțini parametri și valori discrete
- Setează
n_jobs=-1pentru paralelizare automată - Alege scoring-ul în funcție de problemă: "accuracy", "roc_auc", "f1", "r2"
- Nu optimiza prea mulți parametri simultan — crește exponențial timpul
Greșeli Comune
- Grid prea mare — 10 parametri × 5 valori fiecare = 10 milioane de combinații
- Folosești datele de test în căutare — cauți data leakage. GridSearchCV face CV doar pe train
- Optimizezi pentru acuratețe când datele sunt dezechilibrate — folosește "f1" sau "roc_auc"
- Nu setezi random_state — rezultatele nu sunt reproductibile
- Cauți perfecțiunea — o îmbunătățire de 0.1% poate să nu merite timpul
Întrebări Frecvente
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. DodaTech tools integrate seamlessly with sklearn for enhanced productivity and security.
← Previous
Cum să extragi și să selecționezi features
Next →
Cum să folosești un LLM (ChatGPT, Claude) în aplicații
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro