Skip to content

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=-1 pentru 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

  1. Grid prea mare — 10 parametri × 5 valori fiecare = 10 milioane de combinații
  2. Folosești datele de test în căutare — cauți data leakage. GridSearchCV face CV doar pe train
  3. Optimizezi pentru acuratețe când datele sunt dezechilibrate — folosește "f1" sau "roc_auc"
  4. Nu setezi random_state — rezultatele nu sunt reproductibile
  5. Cauți perfecțiunea — o îmbunătățire de 0.1% poate să nu merite timpul

Întrebări Frecvente

### Care e diferența dintre GridSearchCV și RandomizedSearchCV?

GridSearchCV testează toate combinațiile (exhaustiv). RandomizedSearchCV testează un număr fix de combinații aleatoare, fiind mai rapid pentru spații mari.

Cum aleg scoring-ul potrivit?

Pentru clasificare: "accuracy" (clase echilibrate), "f1" (dezechilibrat), "roc_auc" (probabilități). Pentru regresie: "r2" sau "neg_mean_squared_error".

Cât timp durează GridSearchCV?

Depinde de numărul de combinații și volumul de date. Un grid cu 27 de combinații și 5-fold CV înseamnă 135 de antrenări.

Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. DodaTech tools integrate seamlessly with sklearn for enhanced productivity and security.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro