Должны ли мы применять нормализацию и к тестовым данным?

17

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

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

Я новичок в этой области. Поэтому, пожалуйста, игнорируйте, если вопрос кажется глупым?

Кишан Кумар
источник
4
Ваши тестовые данные должны быть в том же масштабе, что и ваши тренировочные данные.
Jon

Ответы:

36

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

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

Вам требуется не только нормализация, но вы должны применять точно такое же масштабирование, что и для ваших тренировочных данных. Это означает сохранение масштаба и смещения, используемых с вашими тренировочными данными, и повторное использование. Распространенная ошибка новичка состоит в том, чтобы отдельно нормализовать данные вашего поезда и теста.

В Python и SKLearn вы можете нормализовать ваши значения input / X, используя Standard Scaler, например:

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: Вы можете сделать либо. Технически вы можете передавать небольшое количество информации от теста к обучению, если вы действительно подгоняете скалер к комбинированному набору данных, поэтому «официальной» версией может быть то, что скейлер подгоняется только к тренировочным данным и применяется ко всем остальным наборы данных после этого. Тем не менее, эта утечка очень незначительна, и я никогда не видел, чтобы на практике это вызывало проблемы, если вы подгоняете масштабатор ко всем имеющимся данным.
Нил Слэйтер
Спасибо за подтверждение моего предположения о том, что мне нужно использовать масштабирование, основанное на обучающем наборе, для тестовых данных. Но не могли бы вы дать ссылку с объяснением этого? РЕДАКТИРОВАТЬ: не имеет значения, объяснения здесь: datascience.stackexchange.com/questions/58597/…
crazysantaclaus
6

Определенно вы должны нормализовать свои данные. Вы нормализуете данные для следующих целей:

  • Для разных функций в одном масштабе, что ускоряет процесс обучения.

  • Забота о различных функциях справедливо, не заботясь о масштабе.

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

СМИ
источник