ESCALA EN PYTHON

Cuando sus datos tienen diferentes valores e incluso diferentes unidades de medida, puede ser difícil compararlos. ¿Qué son los kilogramos en comparación con los metros? ¿O la altitud en comparación con el tiempo?

La respuesta a este problema es escalar. Podemos escalar los datos en nuevos valores que son más fáciles de comparar.

Mire la tabla a continuación, es el mismo conjunto de datos que usamos en el capítulo de regresión múltiple, pero esta vez la columna de volumen contiene valores en litros en lugar de cm3 (1.0 en lugar de 1000).

CocheModeloCantidadPesoCO2
ToyotaAygo100079099
MitsubishiSpace Star1200116095
SkodaCitigo100092995
Fiat50090086590
MiniCooper15001140105
VWUp!1000929105
SkodaFabia1400110990
MercedesA-Class1500136592
FordFiesta1500111298
AudiA11600115099
HyundaiI20110098099
SuzukiSwift1300990101
FordFiesta1000111299
HondaCivic1600125294
HyundaiI301600132697
OpelAstra1600133097
BMW11600136599
Mazda322001280104
SkodaRapid16001119104
FordFocus20001328105
FordMondeo1600158494
OpelInsignia2000142899
MercedesC-Class2100136599
SkodaOctavia1600141599
VolvoC602000141599
MercedesCLA15001465102
AudiA420001490104
AudiA620001725114
VolvoV7016001523109
BMW520001705114
MercededsE-Class21001605115
VolvoXC7020001746117
FordB-Max16001235104
BMW216001390108
OpelZafira16001405109
MercedesSLK25001395120

Puede ser difícil comparar el volumen 1.0 con el peso 790, pero si escalamos ambos en valores comparables, podemos ver fácilmente cuánto se compara un valor con el otro.

Existen diferentes métodos para escalar datos, en este tutorial usaremos un método llamado estandarización.

El método de estandarización utiliza esta fórmula:

z = (x – u) / s

Donde z es el nuevo valor, x es el valor original, u es la media y s es la desviación estándar.

Si toma la columna de peso del conjunto de datos anterior, el primer valor es 790 y el valor escalado será:

(790 – 1292,23) / 238,74 = -2,1

Si toma la columna de volumen del conjunto de datos anterior, el primer valor es 1,0 y el valor escalado será:

(1,0 – 1,61) / 0,38 = -1,59

Ahora puede comparar -2.1 con -1.59 en lugar de comparar 790 con 1.0.

No tiene que hacer esto manualmente, el módulo sklearn de Python tiene un método llamado StandardScaler() que devuelve un objeto Scaler con métodos para transformar conjuntos de datos.

Ejemplo

Escale todos los valores en las columnas Peso y Volumen:

import pandas 
from sklearn import linear_model
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()

df = pandas.read_csv("data.csv")

X = df[['Weight', 'Volumen']]
scaledX = scale.fit_transform(X)

print(scaledX)

Resultado

Tenga en cuenta que los dos primeros valores son -2.1 y -1.59, lo que corresponde a nuestros cálculos:

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

Predecir valores de CO2

La tarea en el capítulo de Regresión Múltiple era predecir la emisión de CO2 de un automóvil cuando solo sabías su peso y volumen.

Cuando se escala el conjunto de datos, tendrá que usar la escala cuando prediga valores:

Ejemplo

Prediga la emisión de CO2 de un automóvil de 1.3 litros que pesa 2300 kilogramos:

import pandas from sklearn import linear_model
fromsklearn.preprocessingimport StandardScaler
scale = StandardScaler()

df = pandas.read_csv("data.csv")

X = df[['Weight', 'Volumen']]
scaledX = scale.fit_transform(X)
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)

Resultado:

[107.2087328]