Encoder la cible catégorielle avec LabelEncoder de sklearn.preprocessing
Dans cette étape, nous allons prétraiter notre variable cible y. La cible de l'ensemble de données Iris est catégorielle, représentée par les nombres 0, 1 et 2, qui correspondent aux trois espèces différentes de fleurs d'Iris. Bien qu'elles soient déjà numériques, il est de bonne pratique de comprendre comment encoder les étiquettes catégorielles, surtout si elles étaient au format chaîne de caractères (par exemple, 'setosa', 'versicolor').
Explication de LabelEncoder :
- Objectif : Convertit les étiquettes catégorielles (chaînes de caractères ou types mixtes) en entiers
- Fonctionnement : Attribue un entier unique à chaque catégorie unique
- Exemple : ['chat', 'chien', 'chat'] → [0, 1, 0]
Pourquoi utiliser LabelEncoder ?
- De nombreux algorithmes de ML nécessitent des entrées numériques
- Stockage et calcul efficaces
- Conserve la nature catégorielle des données
Méthodes clés :
fit(y) : Apprend le mappage des catégories aux entiers
transform(y) : Applique le mappage appris
fit_transform(y) : Combine les deux étapes en un seul appel
inverse_transform(y_encoded) : Reconvertit les entiers en catégories d'origine
Notes importantes :
- L'ordre est arbitraire (basé sur la première apparition ou le tri)
- Ne convient pas aux données ordinales où l'ordre est important (utiliser OrdinalEncoder à la place)
- Pour les caractéristiques (pas les cibles), envisagez OneHotEncoder pour les données nominales
Ajoutez le code suivant à votre fichier preprocess.py sous le commentaire ## --- Step 5: Encode the target ---. Nous allons créer une instance de LabelEncoder et utiliser la méthode fit_transform(), qui combine l'ajustement et la transformation en une seule étape.
## --- Step 5: Encode the target ---
encoder = LabelEncoder()
y_encoded = encoder.fit_transform(y)
print("\nOriginal target sample:", y[:5]) ## Show first 5 original labels
print("Encoded target sample:", y_encoded[:5]) ## Show first 5 encoded labels
print("Unique encoded values:", np.unique(y_encoded)) ## Show all unique encoded values
Enregistrez le fichier et exécutez-le pour la dernière fois.
python3 preprocess.py
La sortie montrera que la variable cible a été encodée. Comme elle était déjà dans le bon format entier, le résultat est le même, mais cela démontre le processus que vous utiliseriez pour des étiquettes basées sur des chaînes de caractères.
Shape of features (X): (150, 4)
Shape of target (y): (150,)
Scaler object created: StandardScaler()
Scaler mean: [5.84333333 3.05733333 3.758 1.19933333]
Original data mean: [5.84 3.06 3.76 1.2 ]
Scaled data mean: [-0. -0. -0. -0.]
Scaled data sample:
[[-0.9 1.02 -1.34 -1.32]
[-1.14 -0.13 -1.34 -1.32]
[-1.39 0.33 -1.4 -1.32]
[-1.51 0.1 -1.28 -1.32]
[-1.02 1.25 -1.34 -1.32]]
Original target sample: [0 0 0 0 0]
Encoded target sample: [0 0 0 0 0]
Unique encoded values: [0 1 2]