Feature Scaling
Die Transformation von Features auf vergleichbare Wertebereiche – wichtig für viele ML-Algorithmen, besonders bei Distanzmaßen, Gradientenverfahren und Regularisierung.
Zwei Feature-Scaling-Methoden im Vergleich – Normalization skaliert auf [0,1], Standardization auf Mittelwert 0 und Standardabweichung 1.
Beide Methoden skalieren Features, aber unterschiedlich.
Normalization (Min-Max):
x_norm = (x - min) / (max - min)
→ Werte zwischen 0 und 1
Standardization (Z-Score):
x_std = (x - mean) / std
→ Mittelwert 0, Standardabweichung 1
| Aspekt | Normalization | Standardization |
|---|---|---|
| Bereich | [0, 1] | Unbegrenzt |
| Outlier | Sensitiv | Robuster |
| Verteilung | Erhält Form | Zentriert |
| Use Case | Bilder, bounded | Allgemein |
from sklearn.preprocessing import MinMaxScaler, StandardScaler
# Normalization
norm = MinMaxScaler()
X_norm = norm.fit_transform(X)
# Standardization
std = StandardScaler()
X_std = std.fit_transform(X)
Eine pauschale Antwort gibt es nicht, aber einige Faustregeln haben sich bewährt:
Angenommen, ein Feature enthält überwiegend Werte in einem moderaten Bereich – und einen einzigen extremen Ausreißer. Bei Min-Max-Normalisierung landen fast alle regulären Werte zusammengequetscht nahe 0, während der Ausreißer allein den Wert 1 belegt. Die Information im regulären Wertebereich geht praktisch verloren. Standardization wird zwar ebenfalls vom Ausreißer beeinflusst (er verschiebt Mittelwert und Standardabweichung), erhält die relativen Abstände der regulären Werte aber deutlich besser.
| Fehler | Folge | Richtig |
|---|---|---|
| Scaler auf dem gesamten Datensatz fitten | Data Leakage: Testdaten beeinflussen die Skalierung | fit nur auf Trainingsdaten, transform auf Test |
| Skalierung vor dem Train/Test-Split | Gleiches Leakage-Problem | Erst splitten, dann skalieren |
| Neue Daten in Produktion nicht skalieren | Modell sieht völlig andere Wertebereiche | Scaler mit dem Modell zusammen speichern (z. B. als Pipeline) |
| One-Hot-kodierte Features mitskalieren | 0/1-Bedeutung geht verloren | Binäre Features meist unskaliert lassen |
Wenn Ausreißer ein ernstes Problem sind, lohnt der Blick auf den RobustScaler: Er zentriert mit dem Median und skaliert mit dem Interquartilsabstand (IQR). Beide Statistiken sind gegenüber Extremwerten robust.
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler() # (x - median) / IQR
X_robust = scaler.fit_transform(X)
Für die Wahl gilt: Verteilung der Features ansehen (ein Histogramm genügt oft), Ausreißer prüfen und die Anforderungen des Algorithmus kennen – dann ist die Entscheidung meist eindeutig.
Normalization ist wie Prozentangaben (0-100%). Standardization ist wie Schulnoten relativ zum Klassendurchschnitt (wie viele Standardabweichungen über/unter dem Schnitt).
Normalization: Min-Max auf [0,1]
Standardization: Z-Score (mean=0, std=1)
Wahl abhängig von Algorithmus und Datenverteilung
Neural Networks
Standardization meist besser
Image Data
Normalization auf [0,1]
Outlier-sensitive
Standardization robuster
Wenn Werte in bekanntem Bereich sein sollen (0-1), bei Bilddaten, wenn keine Outlier.
Bei Outliers (weniger sensitiv), bei Gaussian-ähnlichen Daten, für die meisten ML-Algorithmen.