Предположим, вы анализируете огромный набор данных из миллиардов наблюдений в день, где каждое наблюдение имеет несколько тысяч разреженных и, возможно, избыточных числовых и категориальных переменных. Скажем, есть одна проблема регрессии, одна проблема неуравновешенной двоичной классификации и одна задача «выяснить, какие предикторы являются наиболее важными». Моя мысль о том, как подойти к проблеме:
Подгонять некоторую прогностическую модель к постепенно увеличивающимся и увеличивающимся (случайным) подвыборкам данных до тех пор, пока:
Подгонка и перекрестная проверка модели становится вычислительно сложной (например, неоправданно медленной на моем ноутбуке, R заканчивается нехватка памяти и т. Д.), ИЛИ
Обучающие и тестовые RMSE или значения точности / отзыва стабилизируются.
Если ошибки обучения и тестирования не стабилизировали (1.), используйте более простую модель и / или реализуйте многоядерные или многоузловые версии модели и перезапустите ее с самого начала.
Если ошибки обучения и теста стабилизировались (2.):
Если (т. Е. Я все еще могу запускать алгоритмы на как он еще не слишком велик), попробуйте повысить производительность, расширив пространство функций или используя более сложную модель и перезапустив ее с самого начала.
Если является «большим» и проведение дальнейшего анализа является дорогостоящим, проанализируйте важность переменной и закончите.
Я планирую использовать пакеты , такие как biglm
, speedglm
, multicore
, и ff
в R на начальном этапе, а затем использовать более сложные алгоритмы и / или многоузловой (на EC2) по мере необходимости.
Похоже ли это на разумный подход, и если да, есть ли у вас какие-либо конкретные советы или предложения? Если нет, то что бы вы попробовали вместо этого для набора данных такого размера?
источник
Ответы:
Вы должны проверить онлайн методы регрессии и классификации для наборов данных такого размера. Эти подходы позволят вам использовать весь набор данных без необходимости загружать его в память.
Вы также можете проверить Vowpal Wabbit (VW):
https://github.com/JohnLangford/vowpal_wabbit/wiki
Он использует неосновной онлайн-метод, поэтому должен уметь обрабатывать набор данных такого размера. Вы можете сделать регрессию и классификацию, и она поддерживает разреженные форматы. Вы также можете делать оштрафованные версии (например, регрессию / классификацию типа лассо) в VW, что может повысить точность вашей модели.
источник
Я бы предложил использовать Hadoop и RMR (специальный пакет для Map Reduce в R). С помощью этой стратегии вы можете запускать большие наборы данных на обычных компьютерах с доступной конфигурацией (вероятно, через два часа вы получите и Hadoop, и RMR (RHadoop), установленный и запущенный).
Фактически, если у вас более одного компьютера, вы можете создать кластер, что сократит время обработки.
Я даю вам несколько ссылок в поддержку моего предложения:
Итак, мой совет - следовать этим рекомендациям, так как это, безусловно, полезно, если ваши данные огромны.
источник
Это больше комментарий, чем ответ, но я не могу опубликовать его как комментарий (требуется 50 повторений) ..
Вы пытались использовать PCA в своем наборе данных? Это может помочь вам уменьшить пространство переменных и найти возможное направление, по которому переменная исключается из вашей регрессионной модели. При этом модель будет легче вычислять. Здесь вы можете найти интересную дискуссию по использованию PCA с категориальными переменными: можно ли применять анализ главных компонентов к наборам данных, содержащим смесь непрерывных и категориальных переменных?
Кроме того, я полагаю, что вы используете R по многим причинам (я тоже использую R), но может быть проще использовать программное обеспечение, такое как SAS или STATA. Они лучше работают с большими данными, и вам не нужно иметь дело с многоядерными и параллельными вычислениями.
Наконец, попытайтесь подумать, имеет ли смысл использовать как можно больше строк из вашего набора данных. Это набор данных о населении, набор данных о квазипопуляции или выборочный набор данных? Вы можете получить лучшие результаты при хорошей выборке в вашем наборе данных, чем при использовании целых данных. Посмотрите на этот пост: актуальна ли выборка во времена «больших данных»?
Надеюсь это поможет
источник