Лучший способ масштабирования по различным наборам данных

Я столкнулся с особой ситуацией при предварительной обработке данных.

Допустим, у меня есть набор данных 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 ответ

Одно из возможных решений может быть таким.

  1. Нормализуйте (предварительно обработайте) набор данных A так, чтобы диапазон каждого объекта находился в пределах фиксированного интервала, например, между [-1, 1].
  2. Тренируйте свою модель на нормализованном множестве А.
  3. Всякий раз, когда вам дают новый набор данных, такой как B:

    • (3.1.) Нормализуйте новый набор данных таким образом, чтобы у объекта был тот же диапазон, что и у A ([-1, 1]).
    • (3.2) Примените вашу обученную модель (шаг 2) к нормализованному новому набору (3.1).
  4. Поскольку у вас есть взаимно-однозначное соответствие между набором B и его нормализованной версией, вы можете увидеть, что такое прогнозирование для набора B, на основе прогнозов для нормализованного набора B.

Обратите внимание, что вам не нужно иметь доступ к набору B заранее (или к таким наборам, если их сотни). Вы нормализуете их, как только вам дадут один, и вы захотите проверить свою обученную модель на нем.

Другие вопросы по тегам