Σκύλα Μηχανικής Εκμάθησης

Feature Scaling (Scale Features)

It may be difficult to compare data when your data has different values, even when using different units of measurement. How many kilograms are compared to meters? Or altitude compared to time?

The answer to this question is scaling. We can scale the data to new values that are easy to compare.

Please see the table below, which corresponds toΠολυπαραγοντική ΕπιστροφήThe dataset used in the chapter is the same, but this time, the Volume column contains units in liters instead of ccm (1.0 instead of 1000).

Car Model Volume Weight CO2
Toyota Aygo 1.0 790 99
Mitsubishi Space Star 1.2 1160 95
Skoda Citigo 1.0 929 95
Fiat 500 0.9 865 90
Mini Cooper 1.5 1140 105
VW Up! 1.0 929 105
Skoda Fabia 1.4 1109 90
Mercedes A-Class 1.5 1365 92
Ford Fiesta 1.5 1112 98
Audi A1 1.6 1150 99
Hyundai I20 1.1 980 99
Suzuki Swift 1.3 990 101
Ford Fiesta 1.0 1112 99
Honda Civic 1.6 1252 94
Hundai I30 1.6 1326 97
Opel Astra 1.6 1330 97
BMW 1 1.6 1365 99
Mazda 3 2.2 1280 104
Skoda Rapid 1.6 1119 104
Ford Focus 2.0 1328 105
Ford Mondeo 1.6 1584 94
Opel Insignia 2.0 1428 99
Mercedes C-Class 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.7 1523 109
BMW 5 2.0 1705 114
Mercedes E-Class 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

Είναι δύσκολο να συγκρίνουμε την κατανάλωση 1.0 με το βάρος 790, αλλά αν τα κλιμακώσουμε σε τιμές που μπορούν να συγκριθούν, μπορούμε εύκολα να δούμε πόσο μεγάλη είναι η διαφορά μεταξύ μιας τιμής και της άλλης.

Υπάρχουν πολλές μεθόδους κλιμάκωσης δεδομένων, στη σημερινή διδασκαλία θα χρησιμοποιήσουμε μια μέθοδο που ονομάζεται standardization (standardization).

Η μέθοδος standardization χρησιμοποιεί την παρακάτω συνάρτηση:

z = (x - u) / s

όπου z είναι η νέα τιμή, x είναι η αρχική τιμή, u είναι η μέση τιμή, και s είναι η τυπική απόκλιση.

Αν προκύπτει από τον παραπάνω σύνολο δεδομένων weight στη στήλη, η πρώτη τιμή είναι 790, η κλιμακωμένη τιμή είναι:

(790 - 1292.23) / 238.74 = -2.1

Αν προκύπτει από τον παραπάνω σύνολο δεδομένων volume στη στήλη, η πρώτη τιμή είναι 1.0, η κλιμακωμένη τιμή είναι:

(1.0 - 1.61) / 0.38 = -1.59

Τώρα, μπορείτε να συγκρίνετε -2.1 με -1.59 αντί να συγκρίνετε 790 με 1.0.

Δεν χρειάζεται να εκτελέσετε χειροκίνητα αυτήν τη διαδικασία, το μονάδης Python sklearn έχει μια μέθοδο με το όνομα StandardScaler() μεθόδου που επιστρέφει το αντικείμενο Scaler με τη μέθοδο μετατροπής δεδομένων.

Παράδειγμα

Εκτείνετε την κλίμακα όλων των τιμών στις στήλες Weight και 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)
τυπώστε scaledX

Αποτελέσματα:

Παρακαλώ σημειώστε ότι οι πρώτες δύο τιμές είναι -2.1 και -1.59, όπως αναμένεται από τους υπολογισμούς μας:

[[-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

Πολυπαραγοντική ΕπιστροφήΗ εργασία αυτού του κεφαλαίου είναι να προβλέψετε την εκπομπή διοξειδίου του άνθρακα ενός αυτοκινήτου γνωρίζοντας μόνο το βάρος και την κατανάλωση του.

Μετά τη συρρίκνωση της δεδομένων, πρέπει να χρησιμοποιηθεί η κλίμακα κατά την πρόβλεψη των τιμών:

Παράδειγμα

Προβλέψτε την εκπομπή διοξειδίου του άνθρακα ενός αυτοκινήτου 1.3 λίτρων που βάρυει 2300 κιλά:

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)

Αποτελέσματα:

[107.2087328]

Εκτέλεση Παραδείγματος