ML с несбалансированным набором двоичных данных - PullRequest
0 голосов
/ 10 мая 2019

У меня есть проблема, которую я пытаюсь решить: - несбалансированный набор данных с 2 классами - один класс гномов другой (923 против 38) - f1_macro счет, когда набор данных используется как есть для обучения пребывания RandomForestClassifier для TRAIN и TEST в диапазоне 0,6 - 0,65

Во время вчерашнего исследования этой темы я научился передискретизации и особенно алгоритму SMOTE. Кажется, это принесло чудеса с моим счетом TRAIN, так как после сопоставления набора данных с ними мой счет изменился с ~ 0,6 до ~ 0,97. Способ, которым я применил это, был следующим:

  • В начале я отделил свой набор TEST от остальных данных (10% от всех данных)

  • Я применил SMOTE только для набора TRAIN (баланс классов 618 против 618)

  • Я обучил RandomForestClassifier на наборе TRAIN и достиг f1_macro = 0,97

  • при тестировании с набором TEST оценка f1_macro оставалась в диапазоне ~ 0,6 - 0,65

То, что я предположил, произошло: данные удержания в наборе TEST содержали наблюдения, которые значительно отличались от наблюдений перед меньшинством в классе меньшинства в наборе TRAIN, что в итоге научило модель распознавать случаи в наборе TRAIN. хорошо, но выкинули модель из равновесия с этими несколькими выбросами из набора TEST.

Каковы общие стратегии решения этой проблемы? Здравый смысл подсказывает, что я должен попытаться собрать очень репрезентативную выборку класса меньшинства в наборе TRAIN, но я не думаю, что у sklearn есть какие-либо автоматизированные инструменты, позволяющие это сделать?

1 Ответ

2 голосов
/ 10 мая 2019

Ваше предположение верно.Ваша модель машинного обучения в основном переобучается вашим тренировочным данным, которые повторяют один и тот же шаблон для одного класса, и, таким образом, модель изучает этот шаблон и пропускает остальные шаблоны, которые присутствуют в тестовых данных.Это означает, что модель не будет хорошо работать в диком мире.

Если SMOTE не работает, вы можете экспериментировать, тестируя различные модели машинного обучения.Случайный лес, как правило, хорошо работает с наборами данных этого типа, поэтому попробуйте настроить свою радиочастотную модель, обрезав ее или настроив гиперпараметры.Другой способ - назначить веса классов при обучении модели.Вы также можете попробовать штрафные модели, что налагает дополнительные затраты на модель при неправильной классификации класса меньшинства.

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

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

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