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


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.