Utiliser ColumnTransformer avec Pipeline dans scikit-learn en Python

Posted by

Utilisation de Pipeline avec ColumnTransformer (scikit-learn / Python)

Utilisation de Pipeline avec ColumnTransformer (scikit-learn / Python)

ColumnTransformer est un outil très puissant de la bibliothèque scikit-learn en Python qui permet de traiter différemment les différentes colonnes d’un dataset dans un pipeline de transformation. Il est souvent utilisé en conjonction avec la classe Pipeline pour simplifier et automatiser le processus de prétraitement des données avant de les utiliser dans un modèle d’apprentissage automatique.

Voici comment utiliser Pipeline avec ColumnTransformer dans scikit-learn:

  1. Importer les bibliothèques nécessaires:
    <pre>
    import numpy as np
    import pandas as pd
    from sklearn.compose import ColumnTransformer
    from sklearn.pipeline import Pipeline
    from sklearn.impute import SimpleImputer
    from sklearn.preprocessing import StandardScaler, OneHotEncoder
    </pre>
          
  2. Créer un pipeline de transformation en spécifiant les traitements à appliquer à chaque colonne:
    <pre>
    numeric_features = ['age', 'income']
    numeric_transformer = Pipeline(steps=[
        ('imputer', SimpleImputer(strategy='median')),
        ('scaler', StandardScaler())
    ])
    
    categorical_features = ['gender', 'education']
    categorical_transformer = Pipeline(steps=[
        ('imputer', SimpleImputer(strategy='most_frequent')),
        ('onehot', OneHotEncoder())
    ])
    
    preprocessor = ColumnTransformer(
        transformers=[
            ('num', numeric_transformer, numeric_features),
            ('cat', categorical_transformer, categorical_features)
        ])
    </pre>
          
  3. Utiliser le pipeline dans un modèle de machine learning, par exemple une régression logistique:
    <pre>
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LogisticRegression
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    clf = Pipeline(steps=[('preprocessor', preprocessor),
                          ('classifier', LogisticRegression())])
    
    clf.fit(X_train, y_train)
    clf.score(X_test, y_test)
    </pre>
          

En utilisant ColumnTransformer avec Pipeline, vous pouvez facilement gérer et automatiser le prétraitement des données dans vos modèles d’apprentissage automatique, en veillant à ce que chaque colonne soit traitée de la manière appropriée avant d’être utilisée dans le processus d’apprentissage.