Набор для нормализации теста, но более высокий диапазон

Я нормализую и масштабирую свой тренировочный набор с помощью:

# zero mean
feat = (feat - feat.mean()) / feat.std()

# scale between -1, 1
feat = ((feat - feat.min()) / (feat.max() - feat.min())) * 2 - 1

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

2 ответа

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

Для необычных (выбросов), таких как тестовые экземпляры, вы можете обрезать значения, чтобы они находились между максимальным / минимальным значением для масштабирования minmax.

В случае нормализации ваш тест может иметь любое значение, вы просто получите большой z-счет для крайностей.

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