Подтвердить что ты не робот

Рекомендуемый пакет для обработки очень больших данных и машинного обучения в R

Кажется, что R действительно предназначен для обработки наборов данных, которые он может полностью извлечь в память. Какие пакеты R рекомендуется для обработки сигналов и машинного обучения на очень больших наборах данных, которые невозможно извлечь из памяти?

Если R - это просто неправильный способ сделать это, я открыт для других надежных бесплатных предложений (например, scipy, если есть хороший способ обработки очень больших наборов данных)

4b9b3361

Ответ 1

Взгляните на подраздел "Большая память и данные из памяти" в представлении высокопроизводительных вычислительных задач на CRAN. bigmemory и ff - два популярных пакета. Для bigmemory (и связанных biganalytics и bigtabulate), сайт bigmemory имеет несколько очень хороших презентаций, виньет и обзоров от Джей Эмерсон. Для ff я рекомендую прочитать превосходные слайды Adler Oehlschlägel и коллег на веб-сайте ff.

Кроме того, рассмотрите возможность хранения данных в базе данных и чтения в меньших партиях для анализа. Вероятно, существует несколько подходов к рассмотрению. Чтобы начать работу, consdier просматривает некоторые из примеров в biglm, а также эту презентацию от Томаса Ламли.

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

Ответ 2

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

Резка данных может быть выполнена с использованием read.table или readBin, которые поддерживают только чтение подмножества данных. В качестве альтернативы вы можете взглянуть на представление высокопроизводительной вычислительной задачи для пакетов, которые избавляют от лишних функциональных возможностей памяти. Вы также можете поместить свои данные в базу данных. Для пространственных растровых данных отличный растровый пакет обеспечивает анализ вне памяти.

Ответ 3

Для задач машинного обучения я могу порекомендовать использовать biglm пакет, используемый для выполнения "Регрессия для слишком больших данных, чтобы вписаться в память". Для использования R с действительно большими данными можно использовать Hadoop в качестве бэкэнд, а затем использовать пакет rmr для выполнения статистического (или другого) анализа с помощью MapReduce в кластере Hadoop.

Ответ 4

Все зависит от алгоритмов, которые вам нужны. Если они могут быть переведены в форму incremental (когда требуется только небольшая часть данных в любой момент времени, например, для Naive Bayes вы можете хранить в памяти только сама модель и текущее наблюдение), тогда лучшим предложением является постепенное выполнение машинного обучения, считывание новых партий данных с диска.

Однако для многих алгоритмов и особенно их реализаций действительно нужен весь набор данных. Если размер набора данных соответствует вашему диску (и ограничениям файловой системы), вы можете использовать пакет mmap, который позволяет для сопоставления файла на диске в память и использования его в программе. Обратите внимание, однако, что чтение-запись на диск является дорогостоящим, и R иногда любит часто перемещать данные вперед и назад. Так что будь осторожен.

Если ваши данные не могут быть сохранены даже на вашем жестком диске, вам необходимо будет использовать распределенные системы машинного обучения. Одна такая система на основе R Revolution R, которая предназначена для обрабатывать действительно большие наборы данных. К сожалению, он не является открытым исходным кодом и стоит довольно много денег, но вы можете попытаться получить бесплатную академическую лицензию . В качестве альтернативы вы можете быть заинтересованы в Java Apache Mahout - не очень элегантное, но очень эффективное решение на основе на Hadoop и в том числе многие важные алгоритмы.

Ответ 5

Если памяти недостаточно, одно решение - это передача данных на диск и использование распределенных вычислений. Я думаю, что RHadoop (R + Hadoop) может быть одним из решений для решения проблемы с большим количеством данных.