Давайте разберем это с двумя основными вопросами: как обрабатывать несбалансированные наборы данных и какую модель использовать.
Несбалансированные наборы данных
Большинство алгоритмов машинного обучения в некоторой степени чувствительны к несбалансированным наборам данных. Это серьезная проблема для машинного обучения в таких областях, как медицинская диагностика или сейсмология, где у вас 98% «нормальных» показаний и 2% «событийных» показаний. У этой проблемы нет серебряной пули . Некоторые алгоритмы более устойчивы к несбалансированному набору данных, а некоторые - умышленно разбалансируют свои наборы данных для поддержки сильной модели (см. bagging ), и есть варианты дополнить ваши данные, вводя клонированные данные со статистическим шумом. Тем не менее, ваш самый простой и эффективный подход состоит в том, чтобы уничтожить ваш набор данных, чтобы сделать его сбалансированным.
У вас есть разделение классов на 2000 | 2000 | 500 точек данных. Произведите случайную выборку 500 точек данных из каждого из первых двух классов, чтобы получить сбалансированный набор данных 500 | 500 | 500. Важно сделать выборку случайным образом, вместо того, чтобы просто брать первые 500, как вы хотите, чтобы была репрезентативная выборка класса населения. о том, как выбрать точки данных, см. в модуле numpy.random
.
Выбор модели
Несмотря на то, что Deep Learning изображается как начало и конец для машинного обучения, он представляет значительную сумму времени и затрат на подготовку, обучение и мониторинг. Типичный подход к любой новой проблеме - попробовать некоторые базовые модели поверхностного обучения. Часто вы видите следующий сценарий ios:
- Ваши базовые модели не могут тренироваться.
- Ваша базовая модель тренируется и подходит умеренно
- Ваша базовая модель тренируется и подходит близко
В первом сценарии ваша модель глубокого обучения также вряд ли будет тренироваться. В третьем сценарии нет необходимости строить модель глубокого обучения, когда ее может решить более простой алгоритм. Сценарий 2 - ваш кандидат для глубокого обучения.
Итак, какие модели вы могли бы использовать?
Что ж, мы знаем, что это проблема под наблюдением, что у нас есть большое количество образцов, и что мы ищем для классификации. Лучшая ставка для такого рода вопросов - модель Случайные леса . Существует хорошая простая реализация в scikit-learn
и сотнях учебных пособий.
В качестве альтернативы, если вы смотрите на соответствие классов с помощью кластеризации, K-означает ++ модели (и со) или даже Гауссовские модели смесей - хорошее место для начала (опять же, см. Scikit Learn's sklearn.clustering
и sklearn.mixture
)
Если оно подходит хорошо , тогда ваша работа выполнена. Если оно подходит умеренно , подумайте о глубоком обучении. Если он не подходит, добавьте больше функций (и больше разнообразных функций) в ваш набор данных.