Construire des pipelines d'apprentissage automatique avec Scikit-Learn

Machine LearningMachine LearningBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

En machine learning, un pipeline est une série d'étapes effectuées séquentiellement pour transformer les données d'entrée puis construire un modèle. Scikit-learn fournit une classe pipeline qui peut être utilisée pour chaîner plusieurs étapes de traitement ensemble, facilitant la construction de modèles complexes impliquant plusieurs étapes de prétraitement et de modélisation.

Dans ce tutoriel, nous allons démontrer comment construire un pipeline avec une sélection de caractéristiques et une classification SVM à l'aide de Scikit-learn. Nous montrerons comment intégrer la sélection de caractéristiques dans le pipeline pour éviter le surapprentissage, et comment examiner le pipeline pour mieux comprendre le modèle.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous réglerons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_selection("Feature Selection") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/pipeline("Pipeline") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/metrics("Metrics") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49126{{"Construire des pipelines d'apprentissage automatique avec Scikit-Learn"}} sklearn/feature_selection -.-> lab-49126{{"Construire des pipelines d'apprentissage automatique avec Scikit-Learn"}} sklearn/pipeline -.-> lab-49126{{"Construire des pipelines d'apprentissage automatique avec Scikit-Learn"}} sklearn/model_selection -.-> lab-49126{{"Construire des pipelines d'apprentissage automatique avec Scikit-Learn"}} sklearn/metrics -.-> lab-49126{{"Construire des pipelines d'apprentissage automatique avec Scikit-Learn"}} sklearn/datasets -.-> lab-49126{{"Construire des pipelines d'apprentissage automatique avec Scikit-Learn"}} ml/sklearn -.-> lab-49126{{"Construire des pipelines d'apprentissage automatique avec Scikit-Learn"}} end

Générer et diviser l'ensemble de données

Nous commencerons par générer un ensemble de données de classification binaire à l'aide de la fonction make_classification de Scikit-learn. Nous diviserons également l'ensemble de données en sous-ensembles d'entraînement et de test à l'aide de la fonction train_test_split de Scikit-learn.

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(
    n_features=20,
    n_informative=3,
    n_redundant=0,
    n_classes=2,
    n_clusters_per_class=2,
    random_state=42,
)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

Construire le pipeline

Nous allons maintenant construire un pipeline qui consiste en deux étapes : la sélection de caractéristiques et la classification SVM. Nous utiliserons la fonction SelectKBest de Scikit-learn pour la sélection de caractéristiques, et la fonction LinearSVC de Scikit-learn pour la classification SVM. La fonction SelectKBest sélectionne les k caractéristiques les plus informatives sur la base de la méthode f_classif, qui calcule la valeur F de l'ANOVA entre chaque caractéristique et la variable cible. Nous définirons k = 3 dans cet exemple.

from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.pipeline import make_pipeline
from sklearn.svm import LinearSVC

anova_filter = SelectKBest(f_classif, k=3)
clf = LinearSVC(dual="auto")
anova_svm = make_pipeline(anova_filter, clf)

Entraîner le pipeline

Nous allons maintenant entraîner le pipeline sur le sous-ensemble d'entraînement en utilisant la méthode fit. Pendant l'entraînement, la fonction SelectKBest sélectionnera les 3 caractéristiques les plus informatives sur la base de la valeur F de l'ANOVA, et la fonction LinearSVC entraînera un classifieur SVM linéaire sur les caractéristiques sélectionnées.

anova_svm.fit(X_train, y_train)

Évaluer le pipeline

Nous allons maintenant évaluer le pipeline sur le sous-ensemble de test en utilisant la méthode predict. Le pipeline sélectionnera les 3 caractéristiques les plus informatives sur la base de la valeur F de l'ANOVA, et la fonction LinearSVC fera des prédictions sur les caractéristiques sélectionnées.

from sklearn.metrics import classification_report

y_pred = anova_svm.predict(X_test)
print(classification_report(y_test, y_pred))

Vérifier le pipeline

Nous pouvons examiner le pipeline pour mieux comprendre le modèle. Nous pouvons utiliser l'index des caractéristiques sélectionnées pour récupérer les noms d'origine des caractéristiques.

anova_svm[:-1].inverse_transform(anova_svm[-1].coef_)

Sommaire

Dans ce tutoriel, nous avons démontré comment construire un pipeline avec sélection de caractéristiques et classification SVM à l'aide de Scikit-learn. Nous avons montré comment intégrer la sélection de caractéristiques dans le pipeline pour éviter le surapprentissage, et comment examiner le pipeline pour mieux comprendre le modèle. Les pipelines sont un outil puissant pour construire des modèles complexes de manière modulaire et efficace.