Feature scaling rewrites every feature onto a comparable range, so no column wins just for being measured in bigger numbers. The dots keep their shape — only the axis underneath changes.
Where you meet it
- Distance models — k-NN, k-means, SVM with an RBF kernel — where a Euclidean distance mixes all features.
- Gradient-trained models — linear/logistic regression, neural nets — where uneven scales make the loss surface lopsided.
- PCA and anything variance-based: the largest-scaled feature would otherwise dominate the components.
What it does
It applies a per-feature linear map learned from the data. Income in € (0–100,000) and age in years (0–100) get pulled onto one footing, so the model weighs them by signal, not by unit. The map is monotonic, so the order of the points never changes.
Without scaling, your model doesn't learn what matters — it learns what was measured in bigger numbers.
How it works
Two workhorses. Min-Max rescales each feature into a fixed range, by default [0, 1]:
x' = (x - min) / (max - min) # min → 0, max → 1
Standardization (z-score) re-centres to mean 0 and unit standard deviation:
x' = (x - μ) / σ # mean → 0, std → 1
Why bother? A distance like √(Δincome² + Δage²) is swamped by income simply because its raw numbers are ~1000× larger — age stops mattering. Gradient descent feels the same imbalance: with mismatched scales the loss surface is a stretched valley, and the steps zig-zag instead of heading straight down, so training crawls. Putting features on one scale removes the artificial advantage of large units.
Watch out
- Fit on train only. Compute
min/maxorμ/σon the training split, then apply those same numbers to test data. Fitting on the full set leaks test information — in scikit-learn:fiton train,transformon test. - Min-Max is outlier-sensitive. One extreme value sets the range and crushes everything else into a thin band; z-score is steadier, but neither removes outliers (reach for
RobustScaler). - Tree models don't need it. Decision trees, random forests and gradient boosting split on thresholds per feature, so monotonic rescaling changes nothing.
- z-score assumes spread is meaningful; on near-constant features
σ → 0blows up. The shape of the distribution is never fixed by scaling — it only moves the axis.
Go deeper
- scikit-learn — Preprocessing data: standardization & scaling to a range
- scikit-learn — Importance of Feature Scaling (k-NN & PCA, worked example)
- scikit-learn — StandardScaler API (z = (x − u) / s)
- scikit-learn — MinMaxScaler API (scaling to a range, outlier note)
- Google ML Crash Course — Normalization (z-score, linear scaling, convergence)
Feature Scaling bringt jedes Feature auf einen vergleichbaren Bereich — damit keine Spalte nur deshalb gewinnt, weil sie in größeren Zahlen gemessen wird. Die Punkte behalten ihre Form, nur die Achse darunter ändert sich.
Wo es vorkommt
- Distanzmodelle — k-NN, k-Means, SVM mit RBF-Kernel — wo eine euklidische Distanz alle Features vermischt.
- Gradienten-trainierte Modelle — lineare/logistische Regression, neuronale Netze — wo ungleiche Skalen die Verlustfläche verzerren.
- PCA und alles Varianzbasierte: sonst dominiert das am stärksten skalierte Feature die Komponenten.
Was es tut
Es wendet eine lineare Abbildung pro Feature an, gelernt aus den Daten. Einkommen in € (0–100.000) und Alter in Jahren (0–100) werden auf eine gemeinsame Basis gezogen, sodass das Modell sie nach Signal gewichtet, nicht nach Einheit. Die Abbildung ist monoton — die Reihenfolge der Punkte ändert sich nie.
Ohne Scaling lernt dein Modell nicht, was zählt — sondern was in größeren Zahlen gemessen wurde.
Wie es funktioniert
Zwei Arbeitspferde. Min-Max skaliert jedes Feature in einen festen Bereich, standardmäßig [0, 1]:
x' = (x − min) / (max − min) # min → 0, max → 1
Standardisierung (z-Score) zentriert auf Mittel 0 und Standardabweichung 1:
x' = (x − μ) / σ # Mittel → 0, SD → 1
Warum der Aufwand? Eine Distanz wie √(ΔEinkommen² + ΔAlter²) wird vom Einkommen erschlagen, schlicht weil seine Rohzahlen ~1000× größer sind — Alter fällt raus. Gradient Descent spürt dieselbe Schieflage: bei ungleichen Skalen ist die Verlustfläche ein gestrecktes Tal, die Schritte zickzacken statt geradeaus abzusteigen, das Training kriecht. Eine gemeinsame Skala nimmt großen Einheiten ihren künstlichen Vorteil.
Worauf achten
- Nur auf Train fitten.
min/maxbzw.μ/σauf dem Trainings-Split berechnen, dann genau diese Werte auf die Testdaten anwenden. Fitten auf dem ganzen Datensatz leakt Testinfo — in scikit-learn:fitauf Train,transformauf Test. - Min-Max ist ausreißerempfindlich. Ein Extremwert setzt den Bereich und presst den Rest in ein schmales Band; z-Score ist robuster, aber keiner entfernt Ausreißer (dafür
RobustScaler). - Baum-Modelle brauchen es nicht. Entscheidungsbäume, Random Forests und Gradient Boosting splitten pro Feature an Schwellen — monotones Reskalieren ändert daran nichts.
- z-Score setzt eine sinnvolle Streuung voraus; bei nahezu konstanten Features läuft
σ → 0aus dem Ruder. Die Form der Verteilung wird durch Scaling nie verändert — es verschiebt nur die Achse.
Mehr dazu
- scikit-learn — Preprocessing data: Standardisierung & Skalierung auf einen Bereich
- scikit-learn — Importance of Feature Scaling (k-NN & PCA, durchgerechnet)
- scikit-learn — StandardScaler API (z = (x − u) / s)
- scikit-learn — MinMaxScaler API (Skalierung auf einen Bereich, Ausreißer-Hinweis)
- Google ML Crash Course — Normalization (z-Score, lineare Skalierung, Konvergenz)