O dimensionamento (escalonamento) é uma etapa crucial no pré-processamento dos dados, pois a maioria dos modelos de Machine Learning exige que os recursos estejam na mesma escala. Para isso, é necessário utilizar a Normalização ou Padronização, que são técnicas de pré-processamento de dados amplamente utilizadas para ajustar as escalas das features (variáveis) de um conjunto de dados. Ambas têm como objetivo melhorar o desempenho de algoritmos, especialmente aqueles sensíveis à magnitude dos dados, como redes neurais e SVM, e métodos baseados no distanciamento dos dados, como k-NN e k-means.

Normalização
A normalização redimensiona os valores das features para um intervalo específico, geralmente entre 0 e 1. Essa técnica é útil quando os dados têm escalas muito diferentes e precisamos que os dados estejam em um intervalo limitado.
Fórmula da Normalização:
$$\large n = \frac{x_{i} – x_{min}}{x_{max} – x_{min}}$$
Sendo:
- $x_{i}:$ valor individual do conjunto de dados
- $x_{min}:$ valor mínimo do conjunto de dados
- $x_{max}:$ valor máximo do conjunto de dados
Python :
# Encontrando o valor mínimo do conjunto de dados
xmin = min(lista)
# Encontrando o valor máximo do conjunto de dados
xmax = max(lista)
# Encontrando os valores normalizados
lista_normalizada = list(map(lambda x: (x-xmin) / (xmax-xmin), lista))
Julia :
# Encontrando o valor mínimo do conjunto de dados
xmin = minimum(values)
# Encontrando o valor máximo do conjunto de dados
xmax = maximum(values)
# Encontrando os valores normalizados
normalizados = (values .- xmin) ./ (xmax - xmin)
Libs:
Padronização
A padronização centraliza os dados em torno da média 0 com um desvio padrão 1. Que é preferido por muitos algoritmos. A padronização não limita os valores a um intervalo específico e mantém informações úteis de outliers.
Fórmula da Padronização:
$$\large z = \frac{x_{i} – \mu}{\sigma}$$
Sendo:
- $x_{i}:$ valor individual do conjunto de dados
- $\mu:$ média
- $\sigma:$ desvio padrão populacional
Python :
# encontrando a média
m = sum(lista)/len(lista)
# Calculando o desvio padrão populacional
s2 = (sum(list(lambda x: (x-m)**2, lista))/len(lista))**0.5
# Encontrando os valores padronizados
lista_padronizada = list(map(lambda x: (x-m) / s2, lista))
Julia :
# encontrando a média
m = sum(values) / length(values)
# Calculando o desvio padrão populacional
s2 = (sum((values .- m).^2) / length(values))^0.5
# Encontrando os valores padronizados
padronizados = (values .- m) / s2
Libs:
Exemplos
Utilizando o exemplo acima, os valores do conjunto de dados {1, 2, 3, 4, 5} serão normalizados e padronizados.
Python
'Normalização'
lista = [1, 2, 3, 4, 5]
xmin = min(lista)
xmax = max(lista)
normalizados = list(map(lambda x: (x - xmin) / (xmax - xmin), lista))
'Padronização'
lista = [1, 2, 3, 4, 5]
m = sum(lista) / len(lista)
s2 = (sum(list(map(lambda x: (x - m)**2, lista))) / len(lista))**0.5
padronizados = list(map(lambda x: (x - m) / s2, lista))
Julia
"Normalização"
values = [1, 2, 3, 4, 5]
xmin = minimum(values)
xmax = maximum(values)
normalizados = (values .- xmin) ./ (xmax - xmin)
"Padronização"
values = [1, 2, 3, 4, 5]
m = sum(values) / length(values)
s2 = (sum((values .- m).^2) / length(values))^0.5
padronizados = (values .- m) / s2
Diferenças:
Usos da Normalização ou Padronização
A normalização deve ser usada quando os dados não seguem uma distribuição normal ou quando você precisa que todas as features estejam no mesmo intervalo. O impacto de outliers é muito alto na normalização.
A padronização deve ser usada quando os dados seguem uma distribuição normal ou quando o algoritmo assume que os dados estão centrados em zero. É a mais adequada para ser usada quando os dados tiverem uma distribuição gaussiana .
Deixe um comentário