Як застосувати стандартизацію / нормалізацію до поїзного і тестового набору, якщо мета прогнозування?


47
  1. Чи я транслюю всі свої дані або складки (якщо застосовується резюме) одночасно? напр

    (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] (нормалізація) тестового набору?


Чи є витончений спосіб кодувати це R? Дивіться це запитання: stackoverflow.com/questions/49260862/…
Boern

Відповіді:


41

Третій спосіб - правильний. Точно чому детально висвітлюється в «Елементах статистичного навчання» , дивіться розділ «Неправильний і правильний шлях до перехресної перевірки», а також в заключній главі « Навчання з даних» на прикладі фондового ринку.

По суті, процедури 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 Це "майбутнє". Якщо ви ще не зібрали дані, ви не можете нормалізувати їх використання.
Меттью Друрі

4
@floodking Якщо ви думаєте , навчальні дані , як «минулі» дані і тестування даних в якості «поточного або майбутнього», шляхом об'єднання через ваші тестові дані неявно використовує інформацію про майбутньому витоку X. даних не тільки про протечках в ваш прогнози, мова йде також про витік інформації з майбутнього. Хорошим правилом є те, що ви повинні мати можливість робити прогнози, використовуючи лише один рядок або дані тестування, інакше ви використовуєте майбутнє. y
Метью Друрі

1
@MatthewDrury. Дякуємо за ваше чітке пояснення. Я згоден з вами зараз. Правильний лише третій спосіб.
затоплення
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.