Normalization vs. Standardization
Zwei Feature-Scaling-Methoden im Vergleich – Normalization skaliert auf [0,1], Standardization auf Mittelwert 0 und Standardabweichung 1.
Die Transformation von Features auf vergleichbare Wertebereiche – wichtig für viele ML-Algorithmen, besonders bei Distanzmaßen, Gradientenverfahren und Regularisierung.
Feature Scaling bringt alle Features auf vergleichbare Wertebereiche.
Problem ohne Scaling:
Feature 1: kleiner Wertebereich
Feature 2: großer Wertebereich
→ Das Feature mit großem Wertebereich kann Distanzberechnungen dominieren
| Methode | Formel | Bereich |
|---|---|---|
| Min-Max | (x - min) / (max - min) | [0, 1] |
| Standard | (x - mean) / std | um Mittelwert 0, abhängig von Verteilung |
| Robust | (x - median) / IQR | Outlier-robust |
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# Fit auf Train, Transform auf beide
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test) # Nur transform!
Bei stark unterschiedlich skalierten Features ist die Loss-Landschaft ein langgezogenes Tal statt einer runden Schüssel: Der Gradient zeigt dann selten direkt zum Minimum, und der Optimierer zickzackt sich langsam voran. Die Lernrate muss sich am empfindlichsten (größten) Feature orientieren und ist für alle anderen zu klein. Skalierte Features machen die Landschaft gleichmäßiger – Gradient Descent konvergiert direkter und verträgt größere Lernraten.
Für distanzbasierte Verfahren wie KNN oder K-Means ist der Effekt noch unmittelbarer: Die euklidische Distanz summiert quadrierte Differenzen pro Feature. Ein Feature mit Wertebereich in Tausendern übertönt eines im Bereich 0 bis 1 vollständig – die Distanz misst dann faktisch nur noch ein einziges Feature.
| Algorithmus | Scaling nötig? | Grund |
|---|---|---|
| KNN, K-Means, SVM | Ja | Distanz- bzw. Margin-basiert |
| Lineare/Logistische Regression mit Regularisierung | Ja | L1/L2 bestraft Koeffizienten skalenabhängig |
| Neuronale Netze | Ja | Stabileres Gradiententraining |
| PCA | Ja | Varianzbasiert – große Skalen dominieren Komponenten |
| Entscheidungsbäume, Random Forest, Gradient Boosting | Meist nein | Splits sind invariant gegenüber monotonen Transformationen |
| Naive Bayes | Nein | Arbeitet mit Verteilungen pro Feature |
Der zuverlässigste Weg, Data Leakage und vergessene Transformationen zu vermeiden, ist eine scikit-learn-Pipeline. Sie garantiert, dass fit nur auf Trainingsdaten passiert – auch innerhalb von Cross-Validation:
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score
pipe = make_pipeline(StandardScaler(), SVC())
scores = cross_val_score(pipe, X, y, cv=5) # Scaler wird pro Fold neu gefittet
inverse_transform in den Originalbereich zurück, sonst sind Metriken und Interpretation falsch.RobustScaler (Median und IQR) verwenden.ColumnTransformer lassen sich numerische und kategorische Spalten getrennt behandeln.Feature Scaling ist wie Währungsumrechnung: Bevor du Preise vergleichst, musst du alles in die gleiche Währung umrechnen – sonst dominieren große Zahlen.
Bringt Features auf vergleichbare Skala
Wichtig für Gradient Descent, KNN, SVM und regularisierte Modelle
Für viele Tree-basierte Modelle oft weniger relevant
Neural Networks
Kann stabilere und schnellere Konvergenz beim Training unterstützen
KNN
Distanzen fair berechnen
Regularisierung
L1/L2-Regularisierung ist meist sinnvoller vergleichbar mit skalierten Features
Besonders bei distanzbasierten Algorithmen, Gradientenverfahren und Regularisierung. Bei vielen Tree-basierten Modellen ist Scaling oft weniger wichtig, kann aber je nach Pipeline trotzdem relevant sein.
Ja. Scaler auf Trainingsdaten fitten und anschließend auf Validierungs- oder Testdaten anwenden. Sonst können Informationen aus Testdaten in das Training einfließen.