Maison  >  Article  >  développement back-end  >  Comment encoder efficacement plusieurs colonnes DataFrame avec Scikit-Learn ?

Comment encoder efficacement plusieurs colonnes DataFrame avec Scikit-Learn ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-25 10:23:11254parcourir

How to Efficiently Encode Multiple DataFrame Columns with Scikit-Learn?

Label encodant plusieurs colonnes DataFrame avec Scikit-Learn

Lorsque vous travaillez avec des étiquettes de chaîne dans un DataFrame pandas, il est souvent nécessaire de les encoder dans entiers pour la compatibilité avec les algorithmes d’apprentissage automatique. LabelEncoder de Scikit-learn est un outil pratique pour cette tâche, mais utiliser plusieurs objets LabelEncoder pour chaque colonne peut être fastidieux.

Pour contourner cela, vous pouvez tirer parti de l'approche suivante :

df.apply(LabelEncoder().fit_transform)

Cela applique un LabelEncoder à chaque colonne du DataFrame, codant efficacement toutes les étiquettes de chaîne dans entiers.

Encodage amélioré avec OneHotEncoder

Dans les versions plus récentes de Scikit-Learn (0.20 et supérieures), la classe OneHotEncoder() est recommandée pour l'entrée de chaîne de codage d'étiquette :

OneHotEncoder().fit_transform(df)

OneHotEncoder fournit un encodage efficace à chaud, ce qui est souvent nécessaire pour les données catégorielles.

Opérations d'inversion et de transformation

Pour inverser la transformation ou transformer les étiquettes codées, vous pouvez utiliser les techniques suivantes :

  1. Maintenir un dictionnaire de LabelEncoders :
from collections import defaultdict
d = defaultdict(LabelEncoder)

# Encoding
fit = df.apply(lambda x: d[x.name].fit_transform(x))

# Inverse transform
fit.apply(lambda x: d[x.name].inverse_transform(x))

# Transform future data
df.apply(lambda x: d[x.name].transform(x))
  1. Utiliser ColumnTransformer pour colonnes spécifiques :
from sklearn.preprocessing import ColumnTransformer, OneHotEncoder

# Select specific columns for encoding
encoder = OneHotEncoder()
transformer = ColumnTransformer(transformers=[('ohe', encoder, ['col1', 'col2', 'col3'])])

# Transform the DataFrame
encoded_df = transformer.fit_transform(df)
  1. Utilisez l'étape FlattenForEach de Neuraxle :
from neuraxle.preprocessing import FlattenForEach

# Flatten all columns and apply LabelEncoder
encoded_df = FlattenForEach(LabelEncoder(), then_unflatten=True).fit_transform(df)

En fonction de vos besoins spécifiques, vous pouvez choisir la méthode d'étiquetage la plus appropriée encodage de plusieurs colonnes dans Scikit-Learn.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn