Machine Learning - Schaal
Schaalfuncties
Wanneer uw gegevens verschillende waarden en zelfs verschillende meeteenheden hebben, kan het moeilijk zijn om ze te vergelijken. Wat is kilogram in vergelijking met meters? Of hoogte ten opzichte van de tijd?
Het antwoord op dit probleem is schaalvergroting. We kunnen gegevens schalen naar nieuwe waarden die gemakkelijker te vergelijken zijn.
Kijk eens naar de onderstaande tabel, het is dezelfde dataset die we gebruikten in het hoofdstuk over meervoudige regressie , maar deze keer bevat de volumekolom waarden in liters in plaats van cm3 (1,0 in plaats van 1000) .
Het bestand is alleen bedoeld voor testdoeleinden, u kunt het hier downloaden: cars2.csv
Auto | Model | Volume | Gewicht | CO2 |
Toyota | Aygo | 1.0 | 790 | 99 |
Mitsubishi | Ruimte ster | 1.2 | 1160 | 95 |
Skoda | Citigo | 1.0 | 929 | 95 |
Fiat | 500 | 0,9 | 865 | 90 |
Mini | Kuiper | 1.5 | 1140 | 105 |
VW | Omhoog! | 1.0 | 929 | 105 |
Skoda | Fabia | 1.4 | 1109 | 90 |
Mercedes | Een klas | 1.5 | 1365 | 92 |
Ford | fiesta | 1.5 | 1112 | 98 |
Audi | A1 | 1.6 | 1150 | 99 |
Hyundai | I20 | 1.1 | 980 | 99 |
Suzuki | Snel | 1.3 | 990 | 101 |
Ford | fiesta | 1.0 | 1112 | 99 |
Honda | burgerlijk | 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 | snel | 1.6 | 1119 | 104 |
Ford | Focus | 2.0 | 1328 | 105 |
Ford | Mondeo | 1.6 | 1584 | 94 |
Opel | insigne | 2.0 | 1428 | 99 |
Mercedes | C-Klasse | 2.1 | 1365 | 99 |
Skoda | Octavia | 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 |
Het kan moeilijk zijn om het volume 1.0 te vergelijken met het gewicht 790, maar als we ze beide in vergelijkbare waarden schalen, kunnen we gemakkelijk zien hoeveel de ene waarde wordt vergeleken met de andere.
Er zijn verschillende methoden voor het schalen van gegevens, in deze tutorial zullen we een methode gebruiken die standaardisatie wordt genoemd.
De standaardisatiemethode gebruikt deze formule:
z = (x - u) / s
Waar z
is de nieuwe waarde,
x
is de oorspronkelijke waarde,
u
is het gemiddelde en s
is de standaarddeviatie.
Als u de gewichtskolom uit de bovenstaande gegevensset neemt, is de eerste waarde 790 en is de geschaalde waarde:
(790 - ) / = -2.1
Als u de volumekolom uit de bovenstaande gegevensset neemt, is de eerste waarde 1,0 en is de geschaalde waarde:
(1.0 - ) / = -1.59
Nu kunt u -2,1 vergelijken met -1,59 in plaats van 790 met 1,0 te vergelijken.
U hoeft dit niet handmatig te doen, de Python sklearn-module heeft een methode aangeroepen StandardScaler()
die een Scaler-object retourneert met methoden voor het transformeren van datasets.
Voorbeeld
Schaal alle waarden in de kolommen Gewicht en Volume:
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)
Resultaat:
Merk op dat de eerste twee waarden -2,1 en -1,59 zijn, wat overeenkomt met onze berekeningen:
[[-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]]
Voorspel CO2-waarden
De taak in het hoofdstuk Meervoudige regressie was om de CO2-uitstoot van een auto te voorspellen als je alleen het gewicht en het volume kende.
Wanneer de dataset is geschaald, moet u de schaal gebruiken wanneer u waarden voorspelt:
Voorbeeld
Voorspel de CO2-uitstoot van een auto van 1,3 liter die 2300 kilogram weegt:
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)
Resultaat:
[107.2087328]