Apprentissage automatique - Échelle
Caractéristiques de l'échelle
Lorsque vos données ont des valeurs différentes, voire des unités de mesure différentes, il peut être difficile de les comparer. Qu'est-ce que les kilogrammes par rapport aux mètres ? Ou l'altitude par rapport au temps ?
La réponse à ce problème est la mise à l'échelle. Nous pouvons transformer les données en nouvelles valeurs plus faciles à comparer.
Jetez un oeil au tableau ci-dessous, c'est le même ensemble de données que nous avons utilisé dans le chapitre sur la régression multiple , mais cette fois la colonne de volume contient des valeurs en litres au lieu de cm 3 (1,0 au lieu de 1000).
Le fichier est destiné à des fins de test uniquement, vous pouvez le télécharger ici : cars2.csv
Auto | Modèle | Le volume | Poids | CO2 |
Toyota | Aygo | 1.0 | 790 | 99 |
Mitsubishi | Étoile de l'espace | 1.2 | 1160 | 95 |
Skoda | Citigo | 1.0 | 929 | 95 |
Décret | 500 | 0,9 | 865 | 90 |
mini | Tonnelier | 1.5 | 1140 | 105 |
VW | En haut! | 1.0 | 929 | 105 |
Skoda | fabienne | 1.4 | 1109 | 90 |
Mercedes | Une classe | 1.5 | 1365 | 92 |
Gué | Fête | 1.5 | 1112 | 98 |
Audi | A1 | 1.6 | 1150 | 99 |
Hyundai | I20 | 1.1 | 980 | 99 |
Suzuki | Rapide | 1.3 | 990 | 101 |
Gué | Fête | 1.0 | 1112 | 99 |
Honda | Civique | 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 | Rapide | 1.6 | 1119 | 104 |
Gué | Concentrer | 2.0 | 1328 | 105 |
Gué | Mondeo | 1.6 | 1584 | 94 |
Opel | Insigne | 2.0 | 1428 | 99 |
Mercedes | Classe C | 2.1 | 1365 | 99 |
Skoda | Octavie | 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 | Classe E | 2.1 | 1605 | 115 |
VOLVO | XC70 | 2.0 | 1746 | 117 |
Gué | B-Max | 1.6 | 1235 | 104 |
BMW | 2 | 1.6 | 1390 | 108 |
Opel | Zafira | 1.6 | 1405 | 109 |
Mercedes | SLK | 2.5 | 1395 | 120 |
Il peut être difficile de comparer le volume 1.0 avec le poids 790, mais si nous les mettons tous les deux à l'échelle en valeurs comparables, nous pouvons facilement voir à quel point une valeur est comparée à l'autre.
Il existe différentes méthodes pour mettre à l'échelle les données, dans ce didacticiel, nous utiliserons une méthode appelée standardisation.
La méthode de standardisation utilise cette formule :
z = (x - u) / s
Où z
est la nouvelle valeur,
x
est la valeur d'origine,
u
est la moyenne et s
est l'écart type.
Si vous prenez la colonne de poids de l'ensemble de données ci-dessus, la première valeur est 790 et la valeur mise à l'échelle sera :
(790 - ) / = -2.1
Si vous prenez la colonne de volume de l'ensemble de données ci-dessus, la première valeur est 1,0 et la valeur mise à l'échelle sera :
(1.0 - ) / = -1.59
Vous pouvez maintenant comparer -2,1 avec -1,59 au lieu de comparer 790 avec 1,0.
Vous n'avez pas à le faire manuellement, le module Python sklearn a une méthode appelée StandardScaler()
qui renvoie un objet Scaler avec des méthodes pour transformer des ensembles de données.
Exemple
Mettre à l'échelle toutes les valeurs dans les colonnes Poids et 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)
Résultat:
A noter que les deux premières valeurs sont -2,1 et -1,59, ce qui correspond à nos calculs :
[[-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]]
Prédire les valeurs de CO2
La tâche du chapitre sur la régression multiple consistait à prédire les émissions de CO2 d'une voiture alors que vous ne connaissiez que son poids et son volume.
Lorsque l'ensemble de données est mis à l'échelle, vous devrez utiliser l'échelle lorsque vous prédisez des valeurs :
Exemple
Prévoyez les émissions de CO2 d'une voiture de 1,3 litre qui pèse 2300 kilogrammes :
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)
Résultat:
[107.2087328]