Cada algoritmo de machine learning pode “aprender” melhor de acordo com o formato dos dados que recebe como entrada. Neste post vamos entender como podemos preparar nossos dados para extrair o máximo de “conhecimento” de cada algoritmo, tarefa conhecida como data transformation.

Transformar os dados significa adequá-los a um padrão, de modo que todas as observações de um determinado atributo respeitem esta regra.

Por exemplo, imagine que temos uma tabela com um atributo chamado idade e cinco observações cadastradas: 20, 25, 40, 36, 50. Note que o range do nosso atributo é 20 e 50 (valor máximo menos valor mínimo). Se quiséssemos transformar este atributo para um range de 0 e 1 poderíamos aplicar a seguinte regra:

Observações Valor mínimo Valor máximo Valor transformado
20 20 50 0,00
25 20 50 0,17
40 20 50 0,67
36 20 50 0,53
50 20 50 1,00

Existem diferentes tipos de transformações que podemos fazer em nossos dados, vamos ver algumas delas. Vale destacar que estas transformações são mais apropriadas para métodos de regressão, instance-based, SVM e redes neurais e menos úteis para métodos baseados em regras (como árvores de decisão).

  • Scale: Divide cada valor pelo desvio padrão do atributo
  • Center: Subtrai cada valor pela média do atributo
  • Standardize: Combinação das transformações scale e center. Atributos terão média igual a 0 (zero) e desvio padrão igual a 1. Também conhecido como z-score, é dado pela equação: Z = Xi – Média(X) / Desvio padrão(X)
  • Normalize: Transforma os dados em um range de 0 e 1 (como mostrado no nosso exemplo).
  • Box-Cox: Quando um atributo tem a aparência de uma curva normal mas está descolado para a direita ou esquerda, nos referimos à esta característica como skew. Este deslocamento pode ser ajustado para que o atributo se parece mais com uma distribuição Gaussiana. Box-Cox nos permite realizar esta transformação, porém assume que todos os valores são positivos.
  • Yeo-Johnson: Similar ao Box-Cox, mas suporta valores negativos e zero.
  • Principal Component Analysis (PCA): Podemos fazer um post para falar apenas sobre PCA. Resumidamente, plotamos os dados em um novo plano com novos eixos, conhecidos como componentes principais. A ideia é que estes componentes explicam a maior variabilidade dos dados. Este transformação pode ser útil para algoritmos como linear and generalized linear regression.
  • Independent Component Analysis (ICA): Diferente do PCA, esta transformação mantém os componentes independentes. Pode ser útil para algoritmos como Naive Bayes.

É difícil dizer exatamente quando usar cada tipo de transformação, mas seguem algumas dicas:

  • Métodos instance-based (como K-NN e LQV) costumam ser mais efetivos com atributos transformados com scale. Em geral, algoritmos que calculam distâncias se beneficiam com a transformação dos dados.
  • Métodos de regressão (por exemplo linear regression, logistic regression e LDA) podem ter melhores resultados com atributos transformados com standardize. Em geral, algoritmos que assumem que as variáveis de entrada possuem uma distribuição normal.
  • Algoritmos de otimização, como Gradient Descent, podem se beneficiar com a transformação dos dados.
  • Algoritmos que atribuem peso às variáveis costumam ser mais efetivos com atributos transformados com normalize (por exemplo, Redes Neurais)
  • Ao transformar um atributosempre confira os resultados
  • Na prática, teste as transformações e compare os resultados do modelo

Na parte prática em R usaremos o pacote Caret para fazer algumas transformações. Você pode encontrar boas explicações neste link http://topepo.github.io/caret/pre-processing.html.

Usaremos um método chamado preProcess(). Podemos usar este método isoladamente para os atributos (combinando com o método predict) ou dentro do processo de treino (combinando com o método train).

Todos os exemplos citados são para transformação de dados numéricos aplicados em atributos isolados. Note que a função preProcess() automaticamente ignora atributos não numéricos sem apresentar erros.

Na parte prática em Python usaremos scikit-learn.

Faça aqui o download do material em R

Faça aqui o download do material em Python

Grande abraço.
Weslley Moura

Referência: Machine Learning Mastery with R – Jason Brownlee

Anúncios