Maison >développement back-end >Tutoriel Python >Comment étiqueter et encoder efficacement plusieurs colonnes dans Scikit-Learn ?
Encodage d'étiquettes sur plusieurs colonnes dans Scikit-Learn
L'encodage d'étiquettes est une technique courante pour transformer des données catégorielles en caractéristiques numériques. Bien qu'il soit possible de créer une instance LabelEncoder distincte pour chaque colonne, dans les cas où plusieurs colonnes nécessitent un encodage d'étiquettes, il est plus efficace d'utiliser un seul encodeur.
Envisagez un DataFrame avec de nombreuses colonnes d'étiquettes de chaîne. Pour étiqueter l'intégralité du DataFrame, une approche simple pourrait consister à transmettre l'intégralité du DataFrame au LabelEncoder, comme indiqué ci-dessous :
import pandas as pd from sklearn.preprocessing import LabelEncoder df = pd.DataFrame({ 'pets': ['cat', 'dog', 'cat', 'monkey', 'dog', 'dog'], 'owner': ['Champ', 'Ron', 'Brick', 'Champ', 'Veronica', 'Ron'], 'location': ['San_Diego', 'New_York', 'New_York', 'San_Diego', 'San_Diego', 'New_York'] }) le = LabelEncoder() le.fit(df)
Cependant, cette approche entraîne l'erreur suivante :
ValueError: bad input shape (6, 3)
Pour résoudre ce problème, une solution consiste à appliquer le LabelEncoder à chaque colonne du DataFrame à l'aide de la fonction apply. Cette méthode transforme chaque colonne indépendamment, permettant un encodage efficace en une seule étape de plusieurs colonnes :
df.apply(LabelEncoder().fit_transform)
Alternativement, dans scikit-learn 0.20 et versions ultérieures, l'approche recommandée consiste à utiliser OneHotEncoder :
OneHotEncoder().fit_transform(df)
Le OneHotEncoder prend désormais en charge directement l'entrée de chaîne de codage.
Pour plus de flexibilité, le ColumnTransformer peut être utilisé pour appliquer le codage d'étiquettes à des colonnes spécifiques ou uniquement à certains types de données dans les colonnes.
Pour les transformations inverses et la transformation des données futures, un defaultdict peut être utilisé pour conserver les encodeurs d'étiquettes pour chaque colonne. En accédant aux encodeurs à partir du dictionnaire, il est possible de décoder ou d'encoder des données avec les instances LabelEncoder d'origine.
De plus, des bibliothèques comme Neuraxle fournissent l'étape FlattenForEach, qui facilite l'application du même LabelEncoder aux données aplaties.
Dans les cas où différents LabelEncoders sont nécessaires pour différentes colonnes ou lorsque seul un sous-ensemble de colonnes doit être encodé, ColumnTransformer offre un contrôle granulaire sur le processus de sélection et d'encodage.
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!