2014-02-03 3 views
3

Я создал матрицу tdm в R, которую я хочу записать в файл. Это большая разреженная матрица в простой триплетной форме, ~ 20 000 х 10000. Когда я конвертирую его в плотную матрицу для добавления столбцов с помощью cbind, я получаю небольшие ошибки памяти, и процесс не завершается. Я не хочу увеличивать свою оперативную память.Проблема с большой памятью данных в R

Кроме того, я хочу - - связать ТФ и tfidf матрицу вместе - сохранить редкую/плотную матрицу CSV - работают алгоритмы машинного обучения партии, такие, как осуществление J48 в WEKA.

Как сохранить/загрузить набор данных и запустить пакетные алгоритмы ML в пределах ограничений памяти?

Если я могу написать разреженную матрицу в хранилище данных, могу ли я запустить алгоритмы ml в R на разреженной матрице и в пределах ограничений памяти?

+0

см. Пакет 'glmnet' в' R' - он принимает разреженные матрицы, может быть более эффективным для вашей ситуации. –

ответ

3

Там может быть несколько решений:

1) Преобразование матрицы из двойных в целом, если вы имеете дело с целыми числами. Для целых чисел меньше памяти по сравнению с двойными числами.

2) Попробуйте пакет bigmemory.

+0

[ff package] (http://cran.r-project.org/web/packages/ff/index.html) и [colbycol] (http://cran.r-project.org/web/packages/ colbycol/index.html). –

+0

Спасибо всем @djhurio - Я назвал «TermDocumentMatrix()», который создает простую матрицу триплетов в целых числах. Мне нужно cbind добавить столбцы, из-за которых я должен преобразовать его в матрицу или data.frame. Мне также нужно запустить другие algos помимо glm, такие как J48 на разреженных матрицах. 1. Возможно ли, как простая матрица триплетов? 2. Так как я не могу запускать algos помимо тех, что в glmnet на разреженных матрицах, и я не могу создать разреженный arff для запуска непосредственно в Weka, могу ли я запустить другие ML algos, если мои данные не связаны друг с другом/файловыми файлами, выделенными через пакеты, такие как как bigmemory/ff? –

+0

Кроме того, проще управлять памятью на Python с помощью Scikit-learn. Спасибо –

0

Третье решение, в дополнение к упомянутым @djhurio, заключается в использовании услуг облачных вычислений, таких как услуги, предоставляемые Amazon EC2. Вы не упомянули, сколько оперативной памяти вам требуется в точности, но я мог бы быстро собраться из текущего прайс-листа, используя эти службы, вы получите до 244 ГБ ОЗУ. Я сомневаюсь, что вам это нужно в действительности, и если вам нужно всего 16-32 Гб, цена не будет запретительной вообще.

Если вы являетесь академическим пользователем, вы можете захотеть взглянуть на RevoScaleR в Revolution R, коммерческую версию R, которая доступна бесплатно в академическом контексте. Это программное обеспечение обрабатывает большие объекты из коробки.

Смежные вопросы