Лучший способ масштабирования по различным наборам данных
Я столкнулся с особой ситуацией при предварительной обработке данных.
Допустим, у меня есть набор данных A
, Я разделил набор данных на A_train
а также A_test
, Я подхожу A_train
используя любой из данных скалеров (sci-kit learn) и преобразуйте A_test
с этим scaler
, Сейчас обучение нейронной сети с A_train
и проверка на A_test
работает хорошо. Нет переоснащения и производительность хорошая.
Допустим, у меня есть набор данных B
с теми же функциями, что и в A
, но с разными диапазонами значений для функций. Простой пример A
а также B
это могут быть наборы данных о жилищном строительстве в Бостоне и Париже соответственно (это просто аналогия тому, что такие характеристики, как стоимость, уровень преступности и т. д., значительно различаются). Чтобы проверить производительность вышеупомянутой обученной модели на B
трансформируем B
в соответствии с атрибутами масштабирования A_train
а затем подтвердить. Это обычно снижает производительность, так как эта модель никогда не показывает данные из B
,
Странная вещь, если я подхожу и трансформируюсь B
непосредственно вместо использования атрибутов масштабирования A_train
, производительность намного лучше. Обычно это снижает производительность, если я проверяю это на A_test
, В этом сценарии, кажется, работает, хотя это не правильно.
Поскольку я работаю в основном над наборами климатических данных, обучение по каждому набору данных невозможно. Поэтому я хотел бы знать, как лучше масштабировать такие разные наборы данных с одинаковыми функциями, чтобы получить лучшую производительность.
Любые идеи, пожалуйста.
PS: я знаю, что тренировка моей модели с большим количеством данных может улучшить производительность, но меня больше интересует правильный способ масштабирования. Я попытался удалить выбросы из наборов данных и применил QuantileTransformer
Это улучшило производительность, но могло бы быть и лучше.
1 ответ
Одно из возможных решений может быть таким.
- Нормализуйте (предварительно обработайте) набор данных A так, чтобы диапазон каждого объекта находился в пределах фиксированного интервала, например, между [-1, 1].
- Тренируйте свою модель на нормализованном множестве А.
Всякий раз, когда вам дают новый набор данных, такой как B:
- (3.1.) Нормализуйте новый набор данных таким образом, чтобы у объекта был тот же диапазон, что и у A ([-1, 1]).
- (3.2) Примените вашу обученную модель (шаг 2) к нормализованному новому набору (3.1).
Поскольку у вас есть взаимно-однозначное соответствие между набором B и его нормализованной версией, вы можете увидеть, что такое прогнозирование для набора B, на основе прогнозов для нормализованного набора B.
Обратите внимание, что вам не нужно иметь доступ к набору B заранее (или к таким наборам, если их сотни). Вы нормализуете их, как только вам дадут один, и вы захотите проверить свою обученную модель на нем.