Avancé
🧠 Fondamentaux
30 XP
0 personnes ont réussi
GridSearchCV : trouver les meilleurs hyperparamètres
Un Random Forest avec 50 arbres et max_depth=3, ou 200 arbres et max_depth=10 ? C'est le genre de choix qui peut faire passer ton accuracy de 82% a 91%. Ces reglages (les hyperparametres) ne sont pas appris par le modele, c'est a toi de les trouver. GridSearchCV automatise la recherche en testant toutes les combinaisons possibles.
GridSearchCV teste systematiquement toutes les combinaisons d'hyperparamètres que tu lui donnes, en cross-validation. Il garde la meilleure combinaison.
from sklearn.model_selection import GridSearchCV param_grid = {'max_depth': [3, 5, 10], 'n_estimators': [50, 100, 200]} grid = GridSearchCV(modèle, param_grid, cv=5, scoring='accuracy') grid.fit(X, y) grid.best_params_ # meilleurs paramètres grid.best_score_ # meilleur score CV grid.best_estimator_ # le modèle entraine avec les meilleurs params
Écris une fonction gridsearch_rf(X, y, cv=5) qui fait un GridSearch sur un RandomForestClassifier avec les paramètres : n_estimators: [50, 100, 200] max_depth: [3, 5, 10, None] min_samples_split: [2, 5, 10]
Renvoie : 'meilleurs_params' : dictionnaire des meilleurs paramètres 'meilleur_score' : le meilleur score CV 'nb_combinaisons' : le nombre total de combinaisons testees
Tests (4/4)
Meilleurs params est un dict
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=150, n_features=5, random_state=42)
result = gridsearch_rf(X, y, cv=3)
assert isinstance(result['meilleurs_params'], dict)
assert 'n_estimators' in result['meilleurs_params']
Score entre 0 et 1
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=150, n_features=5, random_state=42)
result = gridsearch_rf(X, y, cv=3)
assert 0 <= result['meilleur_score'] <= 1
36 combinaisons
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=150, n_features=5, random_state=42)
result = gridsearch_rf(X, y, cv=3)
assert result['nb_combinaisons'] == 36
Params valides
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=150, n_features=5, random_state=42)
result = gridsearch_rf(X, y, cv=3)
assert result['meilleurs_params']['n_estimators'] in [50, 100, 200]
assert result['meilleurs_params']['max_depth'] in [3, 5, 10, None]