Uma boa prática comum no Machine Learning é apresentar normalização ou padronização de dados das variáveis preditoras, é isso, centralizar os dados subtraindo a média e normalizá-los dividindo pela variação (ou desvio padrão também). Para auto-contenção e para minha compreensão, fazemos isso para alcançar duas coisas principais:
- Evite pesos de modelo pequenos demais para fins de estabilidade numérica.
- Garanta a convergência rápida de algoritmos de otimização, como por exemplo, o Gradiente Conjugado, para que a grande magnitude de uma dimensão preditora em relação às demais não leve a uma convergência lenta.
Geralmente, dividimos os dados em conjuntos de treinamento, validação e teste. Na literatura, geralmente vemos que, para caracterizar a normalização, eles levam a média e a variação (ou desvio padrão) ao longo de todo o conjunto de variáveis preditoras. A grande falha que vejo aqui é que, se você fizer isso, estará introduzindo informações futuras nas variáveis preditivas de treinamento, ou seja, as informações futuras contidas na média e na variância.
Portanto, eu caracterizo a normalização sobre os dados de treinamento e salvo a média e a variação. Em seguida, aplico a normalização de recursos às variáveis preditivas dos conjuntos de dados de validação e teste usando a média e as variações do treinamento. Existem falhas fundamentais nisso? alguém pode recomendar uma alternativa melhor?
Respostas:
Sua abordagem está totalmente correta. Embora as transformações de dados geralmente sejam subvalorizadas como "pré-processamento", não se pode enfatizar o suficiente para que as transformações para otimizar o desempenho do modelo possam e devam ser tratadas como parte do processo de construção do modelo.
Raciocínio: Um modelo deve ser aplicado em dados não vistos, que geralmente não estão disponíveis no momento em que o modelo foi construído. O processo de validação (incluindo a divisão de dados) simula isso. Portanto, para obter uma boa estimativa da qualidade do modelo (e poder de generalização), é necessário restringir o cálculo dos parâmetros de normalização (média e variância) ao conjunto de treinamento.
Só posso adivinhar por que isso nem sempre é feito na literatura. Um argumento poderia ser que o cálculo da média e variância não é tão sensível a pequenas variações de dados (mas mesmo isso só é verdade se o tamanho básico da amostra for grande o suficiente e os dados forem distribuídos aproximadamente normalmente sem valores extremos).
fonte
A normalização de recursos é criar recursos diferentes na mesma escala. A escala acelera a descida do gradiente, evitando muitas iterações extras necessárias quando um ou mais recursos assumem valores muito maiores que os demais (sem escala, a função de custo visualizada mostrará uma grande assimetria).
Eu acho que faz sentido usar a média e var do conjunto de treinamento quando os dados do teste chegarem. No entanto, se o tamanho dos dados for grande, os conjuntos de treinamento e validação podem ser vistos aproximadamente como distribuição normal, portanto, eles compartilham aproximadamente a média e var.
fonte
A metodologia que você descreveu é sólida como outros disseram. Você deve executar exatamente a mesma transformação nos recursos do seu conjunto de testes e nos recursos do seu conjunto de treinamento.
Acho que vale a pena acrescentar que outro motivo para a normalização de recursos é melhorar o desempenho de certos processos sensíveis às diferenças na escala de determinadas variáveis. Por exemplo, a análise de componentes principais (PCA) visa capturar a maior proporção de variação e, como resultado, dará mais peso às variáveis que exibem a maior variação se a normalização do recurso não for realizada inicialmente.
fonte