Maschinelles Lernen – Skalierung
Skalierungsfunktionen
Wenn Ihre Daten unterschiedliche Werte und sogar unterschiedliche Maßeinheiten haben, kann es schwierig sein, sie zu vergleichen. Was sind Kilogramm im Vergleich zu Metern? Oder Höhe im Vergleich zur Zeit?
Die Antwort auf dieses Problem ist die Skalierung. Wir können Daten in neue Werte skalieren, die einfacher zu vergleichen sind.
Schauen Sie sich die Tabelle unten an, es ist derselbe Datensatz, den wir im Kapitel zur multiplen Regression verwendet haben, aber dieses Mal enthält die Volumenspalte Werte in Liter statt cm 3 (1,0 statt 1000).
Die Datei ist nur für Testzwecke gedacht, Sie können sie hier herunterladen: cars2.csv
Wagen | Modell | Volumen | Gewicht | CO2 |
Toyota | Aygo | 1.0 | 790 | 99 |
Mitsubishi | Weltraumstern | 1.2 | 1160 | 95 |
Skoda | Citigo | 1.0 | 929 | 95 |
Fiat | 500 | 0,9 | 865 | 90 |
Mini | Cooper | 1.5 | 1140 | 105 |
VW | Hoch! | 1.0 | 929 | 105 |
Skoda | Fabia | 1.4 | 1109 | 90 |
Mercedes | Eine Klasse | 1.5 | 1365 | 92 |
Ford | Fest | 1.5 | 1112 | 98 |
Audi | A1 | 1.6 | 1150 | 99 |
Hyundai | I20 | 1.1 | 980 | 99 |
Suzuki | Schnell | 1.3 | 990 | 101 |
Ford | Fest | 1.0 | 1112 | 99 |
Honda | Bürgerlich | 1.6 | 1252 | 94 |
Hyundai | I30 | 1.6 | 1326 | 97 |
Opel | Astra | 1.6 | 1330 | 97 |
BMW | 1 | 1.6 | 1365 | 99 |
Mazda | 3 | 2.2 | 1280 | 104 |
Skoda | Schnell | 1.6 | 1119 | 104 |
Ford | Fokus | 2.0 | 1328 | 105 |
Ford | Mondeo | 1.6 | 1584 | 94 |
Opel | Insignien | 2.0 | 1428 | 99 |
Mercedes | C-Klasse | 2.1 | 1365 | 99 |
Skoda | Oktavia | 1.6 | 1415 | 99 |
Volvo | S60 | 2.0 | 1415 | 99 |
Mercedes | CLA | 1.5 | 1465 | 102 |
Audi | A4 | 2.0 | 1490 | 104 |
Audi | A6 | 2.0 | 1725 | 114 |
Volvo | V70 | 1.6 | 1523 | 109 |
BMW | 5 | 2.0 | 1705 | 114 |
Mercedes | E-Klasse | 2.1 | 1605 | 115 |
Volvo | XC70 | 2.0 | 1746 | 117 |
Ford | B-max | 1.6 | 1235 | 104 |
BMW | 2 | 1.6 | 1390 | 108 |
Opel | Zafira | 1.6 | 1405 | 109 |
Mercedes | SLK | 2.5 | 1395 | 120 |
Es kann schwierig sein, das Volumen 1,0 mit dem Gewicht 790 zu vergleichen, aber wenn wir beide in vergleichbare Werte skalieren, können wir leicht sehen, wie viel ein Wert im Vergleich zum anderen ist.
Es gibt verschiedene Methoden zum Skalieren von Daten. In diesem Tutorial verwenden wir eine Methode namens Standardisierung.
Die Standardisierungsmethode verwendet diese Formel:
z = (x - u) / s
Wo z
ist der neue Wert,
x
ist der ursprüngliche Wert,
u
ist der Mittelwert und s
ist die Standardabweichung.
Wenn Sie die Gewichtsspalte aus dem obigen Datensatz nehmen, ist der erste Wert 790 und der skalierte Wert lautet:
(790 - ) / = -2.1
Wenn Sie die Volumenspalte aus dem obigen Datensatz nehmen, ist der erste Wert 1,0 und der skalierte Wert lautet:
(1.0 - ) / = -1.59
Jetzt können Sie -2,1 mit -1,59 vergleichen, anstatt 790 mit 1,0 zu vergleichen.
Sie müssen dies nicht manuell tun, das Python-sklearn-Modul hat eine aufgerufene Methode, StandardScaler()
die ein Scaler-Objekt mit Methoden zum Transformieren von Datensätzen zurückgibt.
Beispiel
Skalieren Sie alle Werte in den Spalten Gewicht und Volumen:
import pandas
from sklearn import linear_model
from
sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("cars2.csv")
X = df[['Weight', 'Volume']]
scaledX = scale.fit_transform(X)
print(scaledX)
Ergebnis:
Beachten Sie, dass die ersten beiden Werte -2,1 und -1,59 sind, was unseren Berechnungen entspricht:
[[-2.10389253 -1.59336644] [-0.55407235 -1.07190106] [-1.52166278 -1.59336644] [-1.78973979 -1.85409913] [-0.63784641 -0.28970299] [-1.52166278 -1.59336644] [-0.76769621 -0.55043568] [ 0.3046118 -0.28970299] [-0.7551301 -0.28970299] [-0.59595938 -0.0289703 ] [-1.30803892 -1.33263375] [-1.26615189 -0.81116837] [-0.7551301 -1.59336644] [-0.16871166 -0.0289703 ] [ 0.14125238 -0.0289703 ] [ 0.15800719 -0.0289703 ] [ 0.3046118 -0.0289703 ] [-0.05142797 1.53542584] [-0.72580918 -0.0289703 ] [ 0.14962979 1.01396046] [ 1.2219378 -0.0289703 ] [ 0.5685001 1.01396046] [ 0.3046118 1.27469315] [ 0.51404696 -0.0289703 ] [ 0.51404696 1.01396046] [ 0.72348212 -0.28970299] [ 0.8281997 1.01396046] [ 1.81254495 1.01396046] [ 0.96642691 -0.0289703 ] [ 1.72877089 1.01396046] [ 1.30990057 1.27469315] [ 1.90050772 1.01396046] [-0.23991961 -0.0289703 ] [ 0.40932938 -0.0289703 ] [ 0.47215993 -0.0289703 ] [ 0.4302729 2.31762392]]
CO2-Werte vorhersagen
Die Aufgabe im Kapitel Multiple Regression bestand darin, den CO2-Ausstoß eines Autos vorherzusagen, wenn man nur dessen Gewicht und Volumen kannte.
Wenn der Datensatz skaliert ist, müssen Sie die Skala verwenden, wenn Sie Werte vorhersagen:
Beispiel
Prognostizieren Sie den CO2-Ausstoß eines 1,3-Liter-Autos, das 2300 Kilogramm wiegt:
import pandas
from sklearn import linear_model
from
sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("cars2.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
scaledX = scale.fit_transform(X)
regr = linear_model.LinearRegression()
regr.fit(scaledX, y)
scaled =
scale.transform([[2300, 1.3]])
predictedCO2 = regr.predict([scaled[0]])
print(predictedCO2)
Ergebnis:
[107.2087328]