Лучший способ масштабирования по различным наборам данных - PullRequest
0 голосов
/ 03 мая 2019

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

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

0 голосов
/ 03 мая 2019

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

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

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

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

...