Я делаю задачу классификации текста с помощью R и получаю матрицу терминов документа размером 22490 на 120 000 (только 4 миллиона ненулевых записей, менее 1% записей). Теперь я хочу уменьшить размерность, используя PCA (анализ основных компонентов). К сожалению, R не может обработать эту огромную матрицу, поэтому я храню эту разреженную матрицу в файле в «Matrix Market Format», надеясь использовать некоторые другие методы для создания PCA.
Таким образом, кто-нибудь может дать мне несколько советов по полезным библиотекам (независимо от языка программирования), которые могут с легкостью выполнить PCA с этой крупномасштабной матрицей, или сделать самодельный PCA, другими словами, сначала рассчитать ковариационную матрицу, и затем вычислить собственные значения и собственные векторы для ковариационной матрицы .
Я хочу рассчитать все ПК (120 000) и выбрать только первые N ПК, на которые приходится 90% отклонений . Очевидно, что в этом случае я должен задавать порог априори, чтобы установить очень малые значения дисперсии равными 0 (в ковариационной матрице), в противном случае ковариационная матрица не будет разреженной, и ее размер будет 120 000 на 120 000, что невозможно справиться с одной машиной. Кроме того, нагрузки (собственные векторы) будут очень большими и должны храниться в разреженном формате.
Большое спасибо за любую помощь!
Примечание: я использую машину с 24 ГБ оперативной памяти и 8 процессорных ядер.
источник
Ответы:
Я предлагаю пакет irlba - он дает практически те же результаты, что и svd, но вы можете определить меньшее число особых значений, для которых нужно найти решение. Пример использования разреженных матриц для решения приза Netflix можно найти здесь: http://bigcomputing.blogspot.de/2011/05/bryan-lewiss-vignette-on-irlba-for-svd.html.
источник
Я предлагаю использовать SLEPc для вычисления частичного SVD. Подробности см. В главе 4 Руководства пользователя и на страницах справки SVD .
источник
Я голосую за mahout, который также хорош для других задач НЛП / ТА и реализует карту / уменьшить.
источник
Я бы предложил использовать пошаговое разложение по сингулярным числам, которых в литературе много. Например:
Все эти подходы сводятся к следующему:
источник
Вы все еще можете использовать R.
Revolution R
это сборка R, которая обрабатывает наборы данных, которые больше, чем RAM. Используйте функциюprincomp
.Он также имеет полный набор функций статистики, специально предназначенных для задач со стилем больших данных, которые не вписываются в ОЗУ, например, линейная регрессия, логистическая регрессия, квантили и т. Д.
Вы можете скачать полнофункциональную академическую версию бесплатно, поставив флажок «Я академик».
источник