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).
Coche | Modelo | Cantidad | Peso | CO2 |
Toyota | Aygo | 1000 | 790 | 99 |
Mitsubishi | Space Star | 1200 | 1160 | 95 |
Skoda | Citigo | 1000 | 929 | 95 |
Fiat | 500 | 900 | 865 | 90 |
Mini | Cooper | 1500 | 1140 | 105 |
VW | Up! | 1000 | 929 | 105 |
Skoda | Fabia | 1400 | 1109 | 90 |
Mercedes | A-Class | 1500 | 1365 | 92 |
Ford | Fiesta | 1500 | 1112 | 98 |
Audi | A1 | 1600 | 1150 | 99 |
Hyundai | I20 | 1100 | 980 | 99 |
Suzuki | Swift | 1300 | 990 | 101 |
Ford | Fiesta | 1000 | 1112 | 99 |
Honda | Civic | 1600 | 1252 | 94 |
Hyundai | I30 | 1600 | 1326 | 97 |
Opel | Astra | 1600 | 1330 | 97 |
BMW | 1 | 1600 | 1365 | 99 |
Mazda | 3 | 2200 | 1280 | 104 |
Skoda | Rapid | 1600 | 1119 | 104 |
Ford | Focus | 2000 | 1328 | 105 |
Ford | Mondeo | 1600 | 1584 | 94 |
Opel | Insignia | 2000 | 1428 | 99 |
Mercedes | C-Class | 2100 | 1365 | 99 |
Skoda | Octavia | 1600 | 1415 | 99 |
Volvo | C60 | 2000 | 1415 | 99 |
Mercedes | CLA | 1500 | 1465 | 102 |
Audi | A4 | 2000 | 1490 | 104 |
Audi | A6 | 2000 | 1725 | 114 |
Volvo | V70 | 1600 | 1523 | 109 |
BMW | 5 | 2000 | 1705 | 114 |
Mercededs | E-Class | 2100 | 1605 | 115 |
Volvo | XC70 | 2000 | 1746 | 117 |
Ford | B-Max | 1600 | 1235 | 104 |
BMW | 2 | 1600 | 1390 | 108 |
Opel | Zafira | 1600 | 1405 | 109 |
Mercedes | SLK | 2500 | 1395 | 120 |
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]