Самый быстрый алгоритм PCA для многомерных данных

11

Я хотел бы выполнить PCA для набора данных, состоящего из приблизительно 40 000 выборок, каждая из которых отображает около 10 000 функций.

Использование функции Matlab princomp последовательно занимает более получаса, после чего я завершаю процесс. Я хотел бы найти реализацию / алгоритм, который работает менее чем за 10 минут. Какой будет самый быстрый алгоритм? Сколько времени займет двухъядерный процессор i7 / 4 Гбайт памяти?

созревать
источник
Да, вы правы, я должен быть более точным. Прошло больше получаса, потом я решил убить процесс. Я должен сделать это по крайней мере десять раз, было бы неплохо иметь что-то, что работает менее чем за 10 минут
мягкий
Насколько скудна ваша матрица?
Арнольд Ноймайер
Процент нулей в матрице выше 80%
смягчают
Проверьте Kernal-PCA также.
Meawoppl

Ответы:

11

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

ARN×MNM

CRM×MO(NM2)O(M3)O(2M2)1.5A

AA

C

Александр
источник
2

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

В Matlab смотрите

помогите свдс

Арнольд Ноймайер
источник
Да, кажется, что итерационные методы работают намного быстрее, если мне нужны только первые сто компонентов.
мягкий
Что касается svds, я попытался перевести свою матрицу в разреженный формат и изменить функцию princomp, чтобы вместо svd использовать svds, и, к моему удивлению, это заняло гораздо больше времени на матрице 2000 * 4000 (180 с вместо 15 с. ). Причудливый ...
мягкий
1
Нет необходимости переключаться на разреженный формат. Кроме того, вам нужно уменьшить количество сингулярных векторов, которые вы хотите вычислить. Для вычисления большого svd, svds не подходит.
Арнольд Ноймайер
2
Также следует отметить, что доминирующими модами являются новые рандомизированные svd-методы, как, например, в stanford.edu/group/mmds/slides2010/Martinsson.pdf
Ник Алджер,
2

Вы можете проверить мой ответ на Cross Validated . Я не хотел копировать это здесь. По сути, вы можете использовать быстрый рандомизированный SVD для вычисления базисных коэффициентов и коэффициентов PCA.

Petrichor
источник
1

Вы можете попробовать алгоритм Fast PCA, который основан на итеративном способе вычисления нескольких собственных векторов. См. A.Sharma и KK Paliwal, Быстрый анализ главных компонентов с использованием анализа с фиксированной запятой, Letters Recognition Letters, 28, 1151-1155, 2007 .

математика
источник