Глубокое обучение против повышения градиента: когда и что использовать?

30

У меня проблема с большими данными с большим набором данных (например, 50 миллионов строк и 200 столбцов). Набор данных состоит из около 100 числовых столбцов и 100 категориальных столбцов и столбца ответов, представляющего проблему двоичного класса. Мощность каждого из категориальных столбцов составляет менее 50.

Я хочу знать априори, должен ли я идти к методам глубокого обучения или методам, основанным на древовидной структуре (например, усиление градиента, adaboost или случайные леса). Существуют ли некоторые аналитические данные или другие методы, которые могут помочь мне выбрать один метод вместо другого?

Nitesh
источник
2
Я думаю, что если у вас нет хорошей интуиции в отношении свойств данных, вы в конечном итоге исследуете оба варианта (возможно, только на 500 000 строк) и перекрестную проверку. Но, возможно, существуют визуализации или другие анализы, которые могут помочь вам получить эту интуицию.
Нил Слэйтер
1
На самом деле я планировал провести большое сравнение моделей для собственного исследования реальных данных на этой неделе. Я немного исправлю результаты и выложу их здесь. Также, по крайней мере, один студент CS изучил вопрос: academia.edu/3526056/…
shadowtalker
1
@NeilSlater Я хотел бы увидеть ответ, касающийся того, что может / может / должна быть эта интуиция
shadowtalker
1
У меня все еще недостаточно репутации, чтобы кратко прокомментировать ваш оригинальный вопрос, и это не совсем ответ. В любом случае, я хотел сказать, что я думаю, что эта статья довольно актуальна для этой проблемы: Фернандес-Дельгадо, М., Чернадас, Э., Барро, С. и Аморим, Д. (2014). Нужны ли нам сотни классификаторов для решения реальных задач классификации? Журнал исследований машинного обучения, 15, 3133–3181. Получено от dl.acm.org/citation.cfm?id=2697065
Хосе Мария Матеос
Существуют ли некоторые аналитические данные или другие методы, которые могут помочь мне выбрать один метод вместо другого? В общем случае нет, «теорема об отсутствии бесплатного обеда» доказывает это. Но есть эвристика, которая может направить вас в правильном направлении, например, scikit-learn.org/stable/tutorial/machine_learning_map/…
Simon

Ответы:

32

Зачем ограничивать себя этими двумя подходами? Потому что они крутые? Я бы всегда начинал с простого линейного классификатора \ регрессора. Таким образом, в этом случае линейная SVM или логистическая регрессия, предпочтительно с реализацией алгоритма, которая может использовать преимущества разреженности из-за размера данных. Выполнение алгоритма DL для этого набора данных займет много времени, и я обычно пробую углубленное изучение специальных проблем, где в данных есть какая-то иерархическая структура, такая как изображения или текст. Это излишне для многих простых задач обучения, и требует много времени и опыта для изучения, а также алгоритмы DL очень медленно обучаются. Кроме того, если у вас есть 50M строк, это не означает, что вам нужно использовать весь набор данных для получения хороших результатов. В зависимости от данных Вы можете получить хорошие результаты с выборкой из нескольких 100 000 строк или нескольких миллионов. Я бы начал с простой выборки с линейного классификатора и усложнил бы, если результаты не будут удовлетворительными. По крайней мере, так вы получите базовый уровень. Мы часто встречаем простые линейные модели, которые позволяют выполнять более сложные модели в большинстве задач, поэтому вы всегда хотите начать с них.

Саймон
источник
4
+1 за начало с простой модели и подвыборки
Мэтт
Я согласен с использованием svm для разреженных данных, но разве вы не думаете, что svm потратит немало времени на подготовку такого огромного набора данных!
blitu12345
Нет, особенно если оно редкое и использует линейное ядро. Но они могут иметь проблемы с большим количеством строк. В любом случае это будет намного быстрее, чем модель DL. Но обратите внимание, что я также рекомендовал логистическую регрессию.
Саймон
Моя главная задача - начать с простой линейной модели и даже не использовать полный набор данных, так как маловероятно, что вам потребуется весь набор данных, чтобы получить хорошую производительность. Я сомневаюсь, что есть большая разница в точности между использованием, скажем, 100 000 строк и нескольких миллионов.
Саймон
+1 за попытку глубокого изучения проблем специалиста, где есть некоторая иерархическая структура данных
eric2323223
4

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

Как только вы достигнете дисбаланса класса 1:10, большинство методов классификации просто перестанут работать. У вас останутся методы, основанные на случайных лесах и, возможно, нейронных сетях (еще не пробовал). Я работаю с балансом классов в диапазоне от 1: 500 до 1: 1000 и обнаружил, что ни понижающая, ни повышающая дискретизация не работают. К счастью, мой набор данных - это «всего» 6 миллионов наблюдений по 200 переменным, и я могу запустить ускоренные деревья на всем наборе за разумное время.

Итак, чтобы прямо ответить на ваш вопрос:

  • Вы должны задать кучу вопросов, на которые вы хотели бы ответить, и в случае классификации проверить баланс классов целевых переменных.

  • Вы должны проверить распределение (не в математическом смысле) пропущенных значений во всех ваших данных и документировать то, что вы найдете. Некоторые методы ML хорошо справляются с отсутствующими значениями, в то время как другие - нет, и вам нужно изучить вменение данных (у которого есть свой собственный набор правил, рекомендаций и проблем).

LauriK
источник
1
Попробуйте SGD классификатор от sklearn с class_weight = «сбалансированный»
Диего
4

С моей точки зрения, для 5 миллионов экземпляров вам нужно много деревьев, чтобы получить хорошую границу обобщения (хорошая модель в терминах непрофессионала). Если это не проблема, тогда сделайте это, даже точный ответ зависит от характера вашей проблемы. GBT - хороший метод, особенно если у вас смешанные типы объектов, такие как категориальные, числовые и тому подобное. Кроме того, по сравнению с нейронными сетями он имеет меньшее количество гиперпараметров для настройки. Следовательно, быстрее выбрать лучшую модель настройки. Еще одна вещь - альтернатива параллельного обучения. Вы можете тренировать несколько деревьев одновременно с хорошим процессором. Если вы не удовлетворены результатами, перейдите к нейронным сетям, поскольку это означает, что ваша модель должна быть более обширной и получать информацию более высокого порядка из ваших данных. Это связано с NN по сравнению с другими алгоритмами обучения.

erogol
источник
4

В соответствии с тем, что @Simon уже сказал:

  1. Подходы глубокого обучения были особенно полезны при решении проблем в области зрительного, речевого и языкового моделирования, где разработка функций сложна и требует больших усилий.
  2. Для вашего приложения это не так, потому что у вас есть четко определенные функции и требуются только взаимодействия функций и т. Д.
  3. Учитывая, что модели глубокого обучения в настоящее время требуют много вычислительных ресурсов и времени ученых на написание кода, я бы предложил выбрать подход не глубокого обучения.

Для вашей проблемы компромисс между усилиями и выгодами, кажется, не в пользу глубокого обучения. DL был бы излишним

Wabbit
источник
1

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

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

Можно построить классификатор Наивного Байеса (NB) в качестве базовой модели, а затем перейти на любую технику машинного обучения, такую ​​как машины опорных векторов (SVM) или многослойные персептроны (MLP). Компромисс здесь заключается в том, что NB вычислительно дешевле, чем MLP, поэтому желательна лучшая производительность от MLP.

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

наивный
источник