Aprendizado de máquina - Escala
Recursos de escala
Quando seus dados têm valores diferentes e até unidades de medida diferentes, pode ser difícil compará-los. O que é quilogramas comparado a metros? Ou altitude em relação ao tempo?
A resposta para este problema é a escala. Podemos dimensionar os dados em novos valores que são mais fáceis de comparar.
Dê uma olhada na tabela abaixo, é o mesmo conjunto de dados que usamos no capítulo de regressão múltipla , mas desta vez a coluna de volume contém valores em litros em vez de cm 3 (1,0 em vez de 1000).
O arquivo é apenas para fins de teste, você pode baixá-lo aqui: cars2.csv
Carro | Modelo | Volume | Peso | CO2 |
Toyota | Aygo | 1,0 | 790 | 99 |
Mitsubishi | Estrela do Espaço | 1.2 | 1160 | 95 |
Skoda | Citigo | 1,0 | 929 | 95 |
Fiat | 500 | 0,9 | 865 | 90 |
Mini | Tanoeiro | 1,5 | 1140 | 105 |
VW | Acima! | 1,0 | 929 | 105 |
Skoda | Fábia | 1,4 | 1109 | 90 |
Mercedes | Uma aula | 1,5 | 1365 | 92 |
Ford | Festa | 1,5 | 1112 | 98 |
Audi | A1 | 1,6 | 1150 | 99 |
Hyundai | I20 | 1.1 | 980 | 99 |
Suzuki | Rápido | 1.3 | 990 | 101 |
Ford | Festa | 1,0 | 1112 | 99 |
Honda | Cívico | 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 | Rápido | 1,6 | 1119 | 104 |
Ford | Foco | 2,0 | 1328 | 105 |
Ford | Mondeo | 1,6 | 1584 | 94 |
Opel | Insígnia | 2,0 | 1428 | 99 |
Mercedes | Classe C | 2.1 | 1365 | 99 |
Skoda | Otávia | 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 |
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 |
Pode ser difícil comparar o volume 1.0 com o peso 790, mas se dimensionarmos ambos em valores comparáveis, podemos ver facilmente o quanto um valor é comparado ao outro.
Existem diferentes métodos para dimensionar dados, neste tutorial usaremos um método chamado padronização.
O método de padronização usa esta fórmula:
z = (x - u) / s
Onde z
é o novo valor,
x
é o valor original,
u
é a média e s
é o desvio padrão.
Se você pegar a coluna de peso do conjunto de dados acima, o primeiro valor será 790 e o valor dimensionado será:
(790 - ) / = -2.1
Se você pegar a coluna de volume do conjunto de dados acima, o primeiro valor será 1,0 e o valor dimensionado será:
(1.0 - ) / = -1.59
Agora você pode comparar -2,1 com -1,59 em vez de comparar 790 com 1,0.
Você não precisa fazer isso manualmente, o módulo Python sklearn possui um método chamado StandardScaler()
que retorna um objeto Scaler com métodos para transformar conjuntos de dados.
Exemplo
Dimensione todos os valores nas colunas Peso e 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)
Resultado:
Observe que os dois primeiros valores são -2,1 e -1,59, o que corresponde aos nossos 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]]
Prever valores de CO2
A tarefa no capítulo de Regressão Múltipla era prever a emissão de CO2 de um carro quando você sabia apenas seu peso e volume.
Quando o conjunto de dados for dimensionado, você terá que usar a escala ao prever valores:
Exemplo
Preveja a emissão de CO2 de um carro de 1,3 litro que pesa 2300 kg:
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)
Resultado:
[107.2087328]