Чи слід застосовувати нормалізацію і для тестування даних?


17

Я роблю проект з проблеми ідентифікації автора. Я застосував нормалізацію tf-idf для підготовки даних, а потім навчив SVM для цих даних.

Тепер при використанні класифікатора слід нормалізувати і тестові дані. Я вважаю, що основна мета нормалізації - зробити так, щоб навчальне альго надавало більшої ваги важливішим особливостям під час навчання. Тож після того, як він навчився, він уже знає, які особливості важливі, а які - ні. То чи є необхідність застосовувати нормалізацію і для тестових даних?

Я новачок у цій галузі. Тож будь ласка, ігноруйте, якщо питання видається дурним?


4
Дані ваших тестів повинні бути в тому ж масштабі, що і ваші дані про навчання.
Джон

Відповіді:


37

Так, вам потрібно застосувати нормалізацію до тестових даних, якщо ваш алгоритм працює з нормалізованими навчальними даними або потребує нормалізованих даних *.

Це тому, що ваша модель працює на представленні, заданому її вхідними векторами. Шкала цих чисел є частиною подання. Це трохи схоже на перетворення між стопами та метрами. . . модель або формула нормально працюватиме лише з одним типом одиниці.

Вам не тільки потрібна нормалізація, але ви повинні застосувати таке саме масштабування, як і для своїх даних про навчання. Це означає, що ви можете зберігати масштаби та компенсації, що використовуються у ваших даних про навчання, та використовувати їх знову. Поширена помилка початківців полягає в тому, щоб окремо нормалізувати дані поїздів і тестів.

У Python та SKLearn ви можете нормалізувати свої вхідні / X значення, використовуючи стандартний масштабувач :

scaler = StandardScaler()
train_X = scaler.fit_transform( train_X )
test_X = scaler.transform( test_X )

Зауважте, як train_Xпотім нормалізується перетворення використання функції, яка підходить (з'ясовує парами). У той час як test_Xконверсія просто перетворюється, використовуючи ті самі парами, які вона дізналася з даних поїздів.

Нормалізація tf-idf, яку ви застосовуєте, повинна працювати аналогічно, оскільки вона вивчає деякі параметри з набору даних у цілому (частота слів у всіх документах), а також з використанням співвідношень, знайдених у кожному документі.


* Деякі алгоритми (наприклад, такі, що базуються на деревах рішень) не потребують нормалізованих входів і можуть справлятися з функціями, що мають різні властиві масштаби.


+1 для пояснення того, що параметри нормалізації тесту повинні бути такими ж, як і ті, що визначені в тренінгу. Я розумію, що ця логіка поширюється і на будь-які набори перевірки.
Greenstick

@Greenstick: Так, звичайно, він поширюється на обробку всіх даних, що надходять у модель. Включення нових даних, якщо модель буде використана для висновку у виробництві. Я думаю, що відповідь досить довгий, не охоплюючи все це, і точка, коли ви розділили дані валідації, дуже різниться (у багатьох моделей це вбудовано в крок навчання), тому не вдалося показати приклад коду.
Ніл Слейтер

2
Чи слід масштабувати (fit_transform) тестові дані З даними тренувань? Або робити це окремо, використовуючи ту саму шкалу (scaler.transform)?
Боб Еберт

2
@BobEbert: Ви можете зробити будь-яке. Технічно у вас може витікати невелика кількість інформації з тесту на поїзд, якщо ви підходите до масштабованого набору даних, тож "офіційна" версія могла б відповідати скалеру лише до навчальних даних і застосувати його до всіх інших набори даних після цього. Однак ця витік дуже незначна, і я ніколи не бачив, щоб це спричинило проблеми на практиці, якщо ви підходите до масштабування до всіх наявних даних.
Ніл Слейтер

Дякуємо, що підтвердили моє припущення, що мені потрібно використовувати масштабування на основі навчальних наборів для даних тесту. Але ви могли б надати посилання з поясненням, що стоїть за цим? EDIT: ніколи не
значте

6

Ви, безумовно, повинні нормалізувати свої дані. Ви нормалізуєте дані для досягнення наступних цілей:

  • Для того, щоб мати різні функції в одному масштабі, що прискорює процес навчання.

  • Для догляду за різними особливостями досить без турботи про масштаб.

Після навчання ваш алгоритм навчання навчився обробляти дані у масштабному вигляді, тому вам доведеться нормалізувати свої тестові дані з нормалізуючими параметрами, використовуваними для навчальних даних.

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