Kategorisches Ziel mit LabelEncoder aus sklearn.preprocessing kodieren
In diesem Schritt werden wir unsere Zielvariable y vorverarbeiten. Die Zielvariable des Iris-Datensatzes ist kategorisch und wird durch die Zahlen 0, 1 und 2 dargestellt, die den drei verschiedenen Iris-Blumenarten entsprechen. Obwohl sie bereits numerisch sind, ist es eine gute Praxis zu verstehen, wie kategorische Labels kodiert werden, insbesondere wenn sie im Zeichenkettenformat vorliegen würden (z. B. 'setosa', 'versicolor').
LabelEncoder erklärt:
- Zweck: Konvertiert kategorische Labels (Zeichenketten oder gemischte Typen) in ganze Zahlen
- Funktionsweise: Weist jeder eindeutigen Kategorie eine eindeutige ganze Zahl zu
- Beispiel: ['cat', 'dog', 'cat'] → [0, 1, 0]
Warum LabelEncoder verwenden?
- Viele ML-Algorithmen erfordern numerische Eingaben
- Effiziente Speicherung und Berechnung
- Behält die kategorische Natur der Daten bei
Wichtige Methoden:
fit(y): Lernt die Zuordnung von Kategorien zu ganzen Zahlen
transform(y): Wendet die gelernte Zuordnung an
fit_transform(y): Kombiniert beide Schritte in einem Aufruf
inverse_transform(y_encoded): Konvertiert ganze Zahlen zurück in die ursprünglichen Kategorien
Wichtige Hinweise:
- Die Reihenfolge ist willkürlich (basiert auf dem ersten Auftreten oder der Sortierung)
- Nicht geeignet für ordinale Daten, bei denen die Reihenfolge wichtig ist (verwenden Sie stattdessen OrdinalEncoder)
- Für Features (nicht für Zielvariablen) sollten Sie OneHotEncoder für nominale Daten in Betracht ziehen
Fügen Sie Ihrer Datei preprocess.py unter dem Kommentar ## --- Step 5: Encode the target --- den folgenden Code hinzu. Wir erstellen eine Instanz von LabelEncoder und verwenden die Methode fit_transform(), die das Anpassen und Transformieren in einem einzigen Schritt kombiniert.
## --- 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
Speichern Sie die Datei und führen Sie sie zum letzten Mal aus.
python3 preprocess.py
Die Ausgabe zeigt, dass die Zielvariable kodiert wurde. Da sie bereits im richtigen Integer-Format vorlag, ist das Ergebnis dasselbe, aber dies demonstriert den Prozess, den Sie für zeichenkettenbasierte Labels verwenden würden.
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]