Первый шаг для больших данных ( , )


21

Предположим, вы анализируете огромный набор данных из миллиардов наблюдений в день, где каждое наблюдение имеет несколько тысяч разреженных и, возможно, избыточных числовых и категориальных переменных. Скажем, есть одна проблема регрессии, одна проблема неуравновешенной двоичной классификации и одна задача «выяснить, какие предикторы являются наиболее важными». Моя мысль о том, как подойти к проблеме:

Подгонять некоторую прогностическую модель к постепенно увеличивающимся и увеличивающимся (случайным) подвыборкам данных до тех пор, пока:

  1. Подгонка и перекрестная проверка модели становится вычислительно сложной (например, неоправданно медленной на моем ноутбуке, R заканчивается нехватка памяти и т. Д.), ИЛИ

  2. Обучающие и тестовые RMSE или значения точности / отзыва стабилизируются.

Если ошибки обучения и тестирования не стабилизировали (1.), используйте более простую модель и / или реализуйте многоядерные или многоузловые версии модели и перезапустите ее с самого начала.

Если ошибки обучения и теста стабилизировались (2.):

  • Если (т. Е. Я все еще могу запускать алгоритмы на как он еще не слишком велик), попробуйте повысить производительность, расширив пространство функций или используя более сложную модель и перезапустив ее с самого начала.NsUбsеT«NИксsUбsеT

  • Если является «большим» и проведение дальнейшего анализа является дорогостоящим, проанализируйте важность переменной и закончите.NsUбsеT

Я планирую использовать пакеты , такие как biglm, speedglm, multicore, и ffв R на начальном этапе, а затем использовать более сложные алгоритмы и / или многоузловой (на EC2) по мере необходимости.

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


1
Это звучит как разумный подход. Я нашел разговор о похожем подходе: youtube.com/watch?v=X9YVSDWQokQ .
Альфа

2
jmlr.csail.mit.edu/proceedings/papers/v7/miller09/miller09.pdf Это может быть полезно. Более подробная информация о математике здесь: ms.unimelb.edu.au/~millerh/papers/gencor_JCGS.pdf
DCL

@dcl: Спасибо - идея - это хороший, недорогой в вычислительном отношении метод нелинейного выбора переменных, который будет хорошо распараллеливаться (хотя он и одномерный). Я мог бы попробовать, потому что это быстро и очень просто для кода. Первоначально я думал об использовании этого очень крутого алгоритма: code.google.com/p/rf-ace .
закрыто

@alfa: мне очень нравится эта идея! Использование последовательного теста на больших и больших подмножествах данных для последовательного устранения наихудших мета-параметров. Это должно значительно улучшиться. Благодарность! ps вот бумажная версия доклада: biglearn.org/files/papers/biglearn2011_submission_2.pdf
lockedoff

Ответы:


2

Вы должны проверить онлайн методы регрессии и классификации для наборов данных такого размера. Эти подходы позволят вам использовать весь набор данных без необходимости загружать его в память.

Вы также можете проверить Vowpal Wabbit (VW):

https://github.com/JohnLangford/vowpal_wabbit/wiki

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


2

Я бы предложил использовать Hadoop и RMR (специальный пакет для Map Reduce в R). С помощью этой стратегии вы можете запускать большие наборы данных на обычных компьютерах с доступной конфигурацией (вероятно, через два часа вы получите и Hadoop, и RMR (RHadoop), установленный и запущенный).

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

Я даю вам несколько ссылок в поддержку моего предложения:

  • Эта ссылка приведет вас к руководству по установке Hadoop на кластер с одним узлом (один компьютер).
  • Эта ссылка и эта ссылка покажут вам, как установить RMR в ваш кластер Hadoop.
  • И, наконец, здесь вы можете найти пример логистической регрессии с помощью RHadoop.

Итак, мой совет - следовать этим рекомендациям, так как это, безусловно, полезно, если ваши данные огромны.


0

Это больше комментарий, чем ответ, но я не могу опубликовать его как комментарий (требуется 50 повторений) ..

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

Кроме того, я полагаю, что вы используете R по многим причинам (я тоже использую R), но может быть проще использовать программное обеспечение, такое как SAS или STATA. Они лучше работают с большими данными, и вам не нужно иметь дело с многоядерными и параллельными вычислениями.

Наконец, попытайтесь подумать, имеет ли смысл использовать как можно больше строк из вашего набора данных. Это набор данных о населении, набор данных о квазипопуляции или выборочный набор данных? Вы можете получить лучшие результаты при хорошей выборке в вашем наборе данных, чем при использовании целых данных. Посмотрите на этот пост: актуальна ли выборка во времена «больших данных»?

Надеюсь это поможет

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.