Como aplicar a padronização / normalização ao treinamento e ao conjunto de testes se a previsão é o objetivo?

47
  1. Transformo todos os meus dados ou dobras (se o CV for aplicado) ao mesmo tempo? por exemplo

    (allData - mean(allData)) / sd(allData)

  2. Transformo trainset e testset separadamente? por exemplo

    (trainData - mean(trainData)) / sd(trainData)

    (testData - mean(testData)) / sd(testData)

  3. Ou eu transformo o trainset e uso cálculos no testset? por exemplo

    (trainData - mean(trainData)) / sd(trainData)

    (testData - mean(trainData)) / sd(trainData)

Eu acredito que 3 é o caminho certo. Se 3 estiver correto, tenho que me preocupar com a média não ser 0 ou o intervalo não estar entre [0; 1] ou [-1; 1] (normalização) do conjunto de testes?

DerTom
fonte
Existe uma maneira elegante de codificar isso R? Veja esta pergunta: stackoverflow.com/questions/49260862/…
Boern 13/03

Respostas:

41

A terceira maneira está correta. Exatamente por que é abordado em detalhes maravilhosos em Os elementos do aprendizado estatístico , consulte a seção "A maneira errada e correta de realizar a validação cruzada" e também no capítulo final de Aprendendo com os dados , no exemplo do mercado de ações.

Essencialmente, os procedimentos 1 e 2 vazam informações sobre a resposta ou o futuro do conjunto de dados retidos no treinamento ou avaliação do seu modelo. Isso pode causar um viés de otimismo considerável na avaliação do seu modelo.

A idéia na validação de modelo é imitar a situação em que você estaria quando seu modelo está tomando decisões de produção, quando você não tem acesso à resposta verdadeira. A conseqüência é que você não pode usar a resposta no conjunto de testes para nada, exceto comparando com os valores previstos.

Outra maneira de abordar isso é imaginar que você só tem acesso a um ponto de dados de cada vez (uma situação comum para modelos de produção). Qualquer coisa que você não possa fazer sob essa suposição, deve desconfiar bastante. Claramente, uma coisa que você não pode fazer é agregar todos os novos pontos de dados passados ​​e futuros para normalizar seu fluxo de produção - portanto, fazer o mesmo para validação de modelo é inválido.

Você não precisa se preocupar com a média do seu conjunto de testes ser diferente de zero, é uma situação melhor do que influenciar suas estimativas de desempenho. Embora, é claro, se o teste for realmente elaborado a partir da mesma distribuição subjacente que o seu trem (uma suposição essencial no aprendizado estatístico), essa média deve sair como aproximadamente zero.

Matthew Drury
fonte
Isso foi o que eu pensei. Obrigado por esclarecer isso!
DerTom
Clearly, one thing you cannot do is aggregate over all new data-points past and future to normalize your production stream of data. Por que não?
Anmol Singh Jaggi
1
@AnmolSinghJaggi É o "e futuro". Se você ainda não coletou os dados, não poderá normalizá-los.
Matthew Drury
4
@floodking Se você pensar em treinar dados como dados de "passado", e teste de dados como "atual ou futuro", agregando através de seus dados de teste que você usa implicitamente informações sobre o futuro de vazamento X. Os dados não é apenas sobre o vazamento em seu preditores, trata-se também de vazar informações do futuro. Uma boa regra geral é que você poderá fazer previsões usando apenas uma linha ou seus dados de teste; caso contrário, você estará usando o futuro. y
Matthew Drury
1
@MatthewDrury. Obrigado pela sua explicação clara. Eu concordo com você agora. Somente a terceira maneira está correta.
floodking 2/11