Menu
CoddyTech

Min-Max-Skalierung

Teil des Abschnitts Statistik für ML der Machine Learning-Journey von Coddy. Lektion 48 von 64.

Min-Max-Skalierung sorgt dafür, dass jedes Merkmal gleichberechtigt berücksichtigt wird: In jeder Spalte wird der kleinste Wert zu 0, der größte zu 1 und alle übrigen liegen dazwischen.

Füge eine 40-jährige Person mit einem Einkommen von 80.000 $ hinzu und skaliere dann alle vier:

Alter und Einkommen von vier Kunden als Tabelle, ein Pfeil und dann dieselbe skalierte Tabelle: In jeder Spalte wurde der kleinste Wert zu 0.00 und der größte zu 1.00; die übrigen Werte liegen dazwischen und sind dunkler schattiert

Broadcasting erledigt das in einer Zeile, mit dem jeweils kleinsten Wert und dem Wertebereich jeder Spalte:

X = np.array([[25, 52000],
              [61, 53000],
              [26, 55000],
              [40, 80000]])
lows = X.min(axis=0)
highs = X.max(axis=0)
scaled = (X - lows) / (highs - lows)

Jetzt wird auch das Alter berücksichtigt. Der nächste Nachbar von Kunde 0 ist nicht mehr der 61-Jährige:

Die skalierten Kunden als Punkte auf einem Quadrat von 0 bis 1, mit Linien von Kunde 0: Der 26-Jährige ist mit 0.11 am nächsten, der 61-Jährige ist 1.00 entfernt, der Verdiener von $80,000 ist 1.08 entfernt

Ein Extremwert wird zu 1 und drückt den Rest in die Nähe von 0, daher eignet sich Min-Max für Spalten ohne Ausreißer.

challenge icon

Aufgabe

Mittel

Eine Rösterei findet Kaffees, die ähnlich schmecken. Jede Zeile von beans ist ein Kaffee: Wassertemperatur (C), Brühzeit (s) und Koffein (mg). Das Programm liest die Positionen i und j; die vorgegebene Funktion distance(a, b) misst den Abstand zwischen zwei Stichproben.

  1. Skaliere beans mit Min-Max-Skalierung.
  2. Gib Every column from 0 to 1: und anschließend die skalierte Tabelle mit 2 Dezimalstellen aus.
  3. Gib den Abstand zwischen ihnen vor und nach der Skalierung wie unten gezeigt aus.

Für drei andere Kaffees, an den Positionen 0 und 1:

Every column from 0 to 1:
[[1.   1.   0.67]
 [0.5  0.5  0.  ]
 [0.   0.   1.  ]]
Coffees 0 and 1: 63.28 apart before scaling, 0.97 after

Probier es selbst

import numpy as np


# Gibt den Abstand zwischen zwei Stichproben zurück (aus Why Scale Features)
def distance(a, b):
    return np.sqrt(((a - b) ** 2).sum())


# Eine Zeile pro Kaffee: Wassertemperatur in C, Brühzeit in Sekunden, Koffein in mg
beans = np.array([[88, 120, 60],
                  [96, 300, 30],
                  [86, 90, 70],
                  [94, 240, 120],
                  [90, 180, 90],
                  [84, 60, 50]])
i = int(input())
j = int(input())

# Schreibe deinen Code unten
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Statistik für ML

Übe selbstständig: Online-Python-Compiler