У меня проблема с большими данными с большим набором данных (например, 50 миллионов строк и 200 столбцов). Набор данных состоит из около 100 числовых столбцов и 100 категориальных столбцов и столбца ответов, представляющего проблему двоичного класса. Мощность каждого из категориальных столбцов составляет менее 50.
Я хочу знать априори, должен ли я идти к методам глубокого обучения или методам, основанным на древовидной структуре (например, усиление градиента, adaboost или случайные леса). Существуют ли некоторые аналитические данные или другие методы, которые могут помочь мне выбрать один метод вместо другого?
Ответы:
Зачем ограничивать себя этими двумя подходами? Потому что они крутые? Я бы всегда начинал с простого линейного классификатора \ регрессора. Таким образом, в этом случае линейная SVM или логистическая регрессия, предпочтительно с реализацией алгоритма, которая может использовать преимущества разреженности из-за размера данных. Выполнение алгоритма DL для этого набора данных займет много времени, и я обычно пробую углубленное изучение специальных проблем, где в данных есть какая-то иерархическая структура, такая как изображения или текст. Это излишне для многих простых задач обучения, и требует много времени и опыта для изучения, а также алгоритмы DL очень медленно обучаются. Кроме того, если у вас есть 50M строк, это не означает, что вам нужно использовать весь набор данных для получения хороших результатов. В зависимости от данных Вы можете получить хорошие результаты с выборкой из нескольких 100 000 строк или нескольких миллионов. Я бы начал с простой выборки с линейного классификатора и усложнил бы, если результаты не будут удовлетворительными. По крайней мере, так вы получите базовый уровень. Мы часто встречаем простые линейные модели, которые позволяют выполнять более сложные модели в большинстве задач, поэтому вы всегда хотите начать с них.
источник
В дополнение к другим ответам (и в комментариях есть хорошая ссылка), это зависит от того, в чем проблема или на какие вопросы вы хотите ответить. Как я могу предположить, основываясь только на моем собственном опыте, то в случае задачи классификации возможные методы могут быть строго ограничены на основе баланса классов в наборе данных.
Как только вы достигнете дисбаланса класса 1:10, большинство методов классификации просто перестанут работать. У вас останутся методы, основанные на случайных лесах и, возможно, нейронных сетях (еще не пробовал). Я работаю с балансом классов в диапазоне от 1: 500 до 1: 1000 и обнаружил, что ни понижающая, ни повышающая дискретизация не работают. К счастью, мой набор данных - это «всего» 6 миллионов наблюдений по 200 переменным, и я могу запустить ускоренные деревья на всем наборе за разумное время.
Итак, чтобы прямо ответить на ваш вопрос:
Вы должны задать кучу вопросов, на которые вы хотели бы ответить, и в случае классификации проверить баланс классов целевых переменных.
Вы должны проверить распределение (не в математическом смысле) пропущенных значений во всех ваших данных и документировать то, что вы найдете. Некоторые методы ML хорошо справляются с отсутствующими значениями, в то время как другие - нет, и вам нужно изучить вменение данных (у которого есть свой собственный набор правил, рекомендаций и проблем).
источник
С моей точки зрения, для 5 миллионов экземпляров вам нужно много деревьев, чтобы получить хорошую границу обобщения (хорошая модель в терминах непрофессионала). Если это не проблема, тогда сделайте это, даже точный ответ зависит от характера вашей проблемы. GBT - хороший метод, особенно если у вас смешанные типы объектов, такие как категориальные, числовые и тому подобное. Кроме того, по сравнению с нейронными сетями он имеет меньшее количество гиперпараметров для настройки. Следовательно, быстрее выбрать лучшую модель настройки. Еще одна вещь - альтернатива параллельного обучения. Вы можете тренировать несколько деревьев одновременно с хорошим процессором. Если вы не удовлетворены результатами, перейдите к нейронным сетям, поскольку это означает, что ваша модель должна быть более обширной и получать информацию более высокого порядка из ваших данных. Это связано с NN по сравнению с другими алгоритмами обучения.
источник
В соответствии с тем, что @Simon уже сказал:
Для вашей проблемы компромисс между усилиями и выгодами, кажется, не в пользу глубокого обучения. DL был бы излишним
источник
Когда у вас есть такой большой набор данных, вы можете играть с любым из методов статистического и машинного обучения, и это очень рекомендуется. Как и предполагали другие, я бы также порекомендовал взять несколько миллионов случайных выборок из данных и поиграть с ними. Поскольку это проблема классификации, я бы сначала следовал простым методам классификации, а затем - более сложным. Логистическая регрессия хороша для начала.
Я хотел добавить, что генеративные модели также должны быть опробованы. Наивный байесовский классификатор - один из простейших вероятностных классификаторов, он превосходит многие сложные методы, такие как машины опорных векторов, во многих задачах. Вы можете посмотреть на эту простую реализацию NB и эту ссылку для сравнения NB с логистической регрессией.
Можно построить классификатор Наивного Байеса (NB) в качестве базовой модели, а затем перейти на любую технику машинного обучения, такую как машины опорных векторов (SVM) или многослойные персептроны (MLP). Компромисс здесь заключается в том, что NB вычислительно дешевле, чем MLP, поэтому желательна лучшая производительность от MLP.
Точный запрос. Глубокое обучение и усиление градиентного дерева - это очень мощные методы, которые могут моделировать любые виды отношений в данных. Но что если в вашем случае простая логистическая регрессия или NB дает желаемую точность. Поэтому всегда лучше сначала попробовать простые приемы и получить базовую производительность. Тогда можно пойти на сложные модели и сравнить с базовой линией.
источник