Recherche de site Web

Comment effectuer une recherche sur grille en utilisant Python ?


L'optimisation des hyperparamètres dans les modèles d'apprentissage automatique nécessite l'utilisation de la recherche par grille. Les performances du modèle sont fortement influencées par les hyperparamètres tels que la force de régularisation ou le taux d'apprentissage. Avec la recherche par grille, un ensemble prédéfini d'hyperparamètres est méthodiquement étudié pour identifier la configuration qui produit les meilleurs résultats. La recherche de grille offre une interface facile à utiliser pour créer une grille d'hyper paramètres et évaluer les performances du modèle via une validation croisée, les deux pouvant être effectuées à l'aide du module Scikit-learn de Python. La recherche par grille automatise la recherche d'hyperparamètres idéaux, permettant aux praticiens de l'apprentissage automatique de se concentrer sur des activités cruciales telles que l'ingénierie des fonctionnalités et la sélection de modèles. Dans cet article, nous allons détailler l'utilisation de Python pour effectuer une recherche dans une grille.

Exécution d'un CV de recherche de grille à l'aide de Python

Nous avions l'intention d'utiliser une recherche par grille dans ce projet pour démontrer le potentiel du package Scikit-learn pour Python. Pour commencer, nous avons créé un exemple d'ensemble de données pour la catégorisation à l'aide de Scikit-learn. Après avoir divisé l'ensemble de données en ensembles de formation et de test, nous avons à nouveau utilisé Scikit-learn pour créer un modèle SVM.

Le modèle SVM est ensuite mis à l'épreuve avec une recherche sur grille, ce qui équivaut à expérimenter diverses combinaisons d'hyper paramètres pour découvrir lequel est le plus performant. Scikit-learn excelle dans ce domaine car il rend la procédure très simple. À l'aide du rapport de classification de Scikit-learn, qui nous fournit une variété de mesures importantes, notamment la précision, le rappel et le score F1 pour chaque classe de l'ensemble de données, nous avons enfin évalué les performances du modèle.

Importer des bibliothèques et créer l'ensemble de données

À l'aide de Scikit-learn, un ensemble étonnant doté d'une tonne de fonctionnalités utiles d'apprentissage automatique, nous créerons notre propre ensemble de données. L'ensemble de données est créé à l'aide du code suivant -

from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, n_features=2, n_informative=2,
   n_redundant=0, n_clusters_per_class=1, random_state=42)

L'ensemble de données a été créé à l'aide d'une programmation assez simple. Seuls quelques paramètres doivent être spécifiés, notamment la taille de l'échantillon (dans ce cas, 1 000), le nombre de fonctionnalités pertinentes, que nous définirons sur 2, et le nombre de clusters par classe, que nous définirons sur 1. pour éviter les clusters qui se chevauchent.

Fractionner l'ensemble de données

Une fois notre ensemble de données prêt, nous devons le séparer en ensembles de formation et de test. 80 % des données seront utilisées pour entraîner notre modèle et les 20 % restants seront utilisés pour le tester.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Création d'un modèle

Ensuite, nous construirons notre modèle en utilisant la méthode Support Vector Machine (SVM). SVM est une option très appréciée pour les tâches de classification car elle gère efficacement les données linéaires et non linéaires.

from sklearn.svm import SVC
model = SVC()

Effectuer une recherche de grille

Dans un tel cas, il est temps de lancer la recherche sur la grille. Nous testerons plusieurs combinaisons d'hyper paramètres à l'aide de la fonction Grid Search CV de Scikit-learn pour découvrir lesquels fonctionnent le mieux.

from sklearn.model_selection import GridSearchCV

param_grid = {'C': [0.1, 1, 10, 100],
   'gamma': [0.1, 1, 10, 100],
   'kernel': ['linear', 'rbf']}

grid = GridSearchCV(model, param_grid, refit=True, verbose=3)
grid.fit(X_train, y_train)

Nous créons une grille d'hyper paramètres à l'aide d'un dictionnaire dans le code, puis la fournissons à la fonction GridSearchCV avec le modèle, le paramètre refit défini sur True et le paramètre détaillé défini sur 3.

Évaluation du modèle

La recherche sur la grille est terminée et il est maintenant temps d'évaluer l'efficacité de notre modèle. Nous utiliserons pour cela la fonction classification_report de Scikit-learn. En utilisant les meilleurs hyper paramètres trouvés par la recherche de grille, cette fonction crée un rapport sur les performances du modèle sur l'ensemble de test.

from sklearn.metrics import classification_report

y_pred = grid.predict(X_test)

print("Best Hyperparameters:", grid.best_params_)
print("\nClassification Report:")
print(classification_report(y_test, y_pred))

Sortir

Best Hyperparameters: {'C': 10, 'gamma': 1, 'kernel': 'rbf'}

Classification Report:
              precision    recall  f1-score   support

           0       0.92      0.97      0.94       104
           1       0.97      0.91      0.94        96

    accuracy                           0.94       200
   macro avg       0.94      0.94      0.94       200
weighted avg       0.94      0.94      0.94       200

Dans le code, nous créons des prédictions pour l'ensemble de tests basées sur les hyper paramètres idéaux à l'aide de la méthode de prédiction de l'objet CV Grid Search. Le rapport de classement et les hyper paramètres les plus importants sont ensuite imprimés.

Méthode CV de recherche aléatoire

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint

param_dist = {'C': randint(1, 100),
   'gamma': randint(1, 100),
   'kernel': ['linear', 'rbf']}

random_search = RandomizedSearchCV(model, param_distributions=param_dist, n_iter=10, random_state=42)
random_search.fit(X_train, y_train)
y_pred_random = random_search.predict(X_test)

print("Best Hyperparameters (Grid Search):", grid.best_params_)
print("\nClassification Report (Grid Search):")
print(classification_report(y_test, y_pred))

print("\nBest Hyperparameters (Randomized Search):", random_search.best_params_)
print("\nClassification Report (Randomized Search):")
print(classification_report(y_test, y_pred_random))

Sortir

Best Hyper parameters (Grid Search): {'C': 10, 'gamma': 1, 'kernel': 'rbf'}

Classification Report (Grid Search):
              precision    recall  f1-score   support

           0       0.92      0.97      0.94       104
           1       0.97      0.91      0.94        96

    accuracy                           0.94       200
   macro avg       0.94      0.94      0.94       200
weighted avg       0.94      0.94      0.94       200


Best Hyperparameters (Randomized Search): {'C': 24, 'gamma': 3, 'kernel': 'rbf'}

Classification Report (Randomized Search):
              precision    recall  f1-score   support

           0       0.93      0.96      0.94       104
           1       0.96      0.92      0.94        96

    accuracy                           0.94       200
   macro avg       0.94      0.94      0.94       200
weighted avg       0.94      0.94      0.94       200

Conclusion

Une recherche par grille est la méthode ultime pour optimiser les hyper paramètres d'un modèle d'apprentissage automatique. Scikit-learn et Python ont été utilisés pour montrer comment effectuer une recherche dans une grille dans cet article de blog. Parallèlement, nous avons travaillé sur un véritable projet dans lequel nous avons produit nos propres ensembles de données, effectué une analyse approfondie des données et présenté nos conclusions.

Les scientifiques des données et les amateurs d'apprentissage automatique peuvent facilement améliorer les performances de leur modèle grâce à la fonction de recherche de grille du module Scikit-learn de Python. La recherche par grille sur vos propres ensembles de données ainsi que les recommandations de cet article de blog peuvent aider vos modèles à mieux fonctionner.

Articles connexes