Должен ли я сбалансировать набор тестов, когда у меня есть сильно несбалансированные данные? - PullRequest
1 голос
/ 30 апреля 2019

Я использую Sklearn GridSearchCv, чтобы найти лучшие параметры для случайного леса применительно к данным дистанционного зондирования с 4 классами (здания, растительность, вода и дороги), проблема в том, что у меня намного больше классов "растительности" чем остальные (под много я имею в виду разницу от тысяч до нескольких миллионов). Должен ли я сбалансировать свой набор данных тестирования для получения метрик?

Я уже уравновешиваю весь набор перед тем, как разделить его на обучение и тестирование, это означает, что оба набора данных имеют одинаковое распределение классов одинаковым образом. Боюсь, это не отражает производительность алгоритма на реальных данных, но дает представление о производительности каждого класса. Если я использую несбалансированные данные, класс «вегетация» может в итоге испортить другие средние значения.

Вот пример баланса, который я делаю, как вы можете видеть, я делаю это прямо на X и y. Какие полные данные и этикетки.

if balance:
    smt = RandomUnderSampler(sampling_strategy='auto')
    X, y = smt.fit_sample(X, y)
    print("Features array shape after balance: " + str(X.shape))

Я хочу лучше понять производительность модели на реальных данных, но я не нашел окончательных ответов на этот вопрос!

1 Ответ

2 голосов
/ 30 апреля 2019

Правило большого пальца при работе с несбалансированными данными гласит: «Никогда не балансируйте данные испытаний». конвейер обработки данных о дисбалансе:

  1. Do preprocess
  2. Применить разделение теста поезда (Стратифицированный).
  3. Баланс данных тренировки (обычно SMOTE работает лучше)
  4. Модель поезда / модели
  5. Проверка данных теста на дисбаланс

Так что вы получите реальную производительность.

Возникает вопрос: почему бы не сбалансировать данные перед разделением теста поезда?

Вы не можете ожидать, что данные реального мира будут сбалансированными, когда вы развертываете в реальном мире, верно ...

Лучшим способом является использование K-сгиба на шаге 2 и выполнение 3,4,5 шагов для каждого сгиба

См. эту статью для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...