Как применить стандартизацию / нормализацию к обучению и тестам, если целью является прогнозирование?

47
  1. Преобразовываю ли я все свои данные или сгибы (если применяется CV) одновременно? например

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

  2. Преобразовать ли наборы поездов и наборы тестов отдельно? например

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

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

  3. Или я преобразую поездный набор и использую вычисления на тестовом наборе? например

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

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

Я считаю, что 3 правильный путь. Если 3 правильно, нужно ли беспокоиться о том, что среднее значение не равно 0 или диапазон не находится между [0; 1] или [-1; 1] (нормализация) тестового набора?

DerTom
источник
Есть ли элегантный способ закодировать это R? Смотрите этот вопрос: stackoverflow.com/questions/49260862/…
Boern

Ответы:

42

Третий способ правильный. Почему это подробно описано в «Элементах статистического обучения» , см. Раздел «Неправильный и правильный способ перекрестной проверки», а также в заключительной главе « Изучение данных» в примере с фондовым рынком.

По сути, процедуры 1 и 2 просачивают информацию либо об ответе, либо из будущего, из вашего набора данных, оставшихся в процессе обучения, или оценки вашей модели. Это может вызвать значительный уклон оптимизма в вашей оценке модели.

Идея проверки модели состоит в том, чтобы имитировать ситуацию, в которой вы бы находились, когда ваша модель принимает производственные решения, когда у вас нет доступа к истинному ответу. Следствием этого является то, что вы не можете использовать ответ в наборе тестов ни для чего, кроме как для сравнения с вашими предсказанными значениями.

Другой способ подойти к этому - представить, что у вас есть доступ только к одной точке данных из вашего времени ожидания (обычная ситуация для производственных моделей). Все, что вы не можете сделать в этом предположении, вы должны с большим подозрением относиться. Ясно, что одну вещь, которую вы не можете сделать, - это агрегировать по всем новым точкам данных в прошлом и будущем, чтобы нормализовать производственный поток данных - поэтому выполнение того же для проверки модели недопустимо.

Вам не нужно беспокоиться о том, что среднее значение вашего набора тестов не равно нулю, это лучшая ситуация, чем смещение ваших оценок производительности. Хотя, конечно, если тест действительно взят из того же базового распределения, что и ваш поезд (существенное предположение в статистическом обучении), среднее значение должно быть примерно равно нулю.

Мэтью Друри
источник
Это то, о чем я думал. Спасибо за разъяснение этого!
DerTom
Clearly, one thing you cannot do is aggregate over all new data-points past and future to normalize your production stream of data, Почему нет?
Анмол Сингх Джагги
1
@AnmolSinghJaggi Это "и будущее". Если вы еще не собрали данные, вы не сможете их нормализовать.
Мэтью Друри,
5
y
1
@MatthewDrury. Спасибо за ваше четкое объяснение. Я согласен с тобой сейчас. Только третий способ верен.
наводнение