Каковы эффективные алгоритмы для вычисления разложения по сингулярным числам (SVD)?

17

В статье Википедии об анализе основных компонентов говорится, что

Существуют эффективные алгоритмы для вычисления SVD без необходимости формирования матрицы , поэтому вычисление SVD теперь является стандартным способом вычисления анализа главных компонентов из матрицы данных, если только не требуется лишь несколько компонентов.XXTX

Может кто-нибудь сказать мне, каковы эффективные алгоритмы, о которых идет речь в статье? Ссылка не указана (URL или цитирование статьи, предлагающей такой способ вычисления, было бы неплохо).

SVD
источник
4
Поиск в Google по алгоритму разложения по сингулярным значениям отлично выделяет соответствующую информацию.
whuber
1
Не забудьте удалить среднее значение перед SVD для PCA!
Memming
Попробуйте Lanczos SVD!
Цири

Ответы:

12

Основной рабочей лошадкой для расчета SVD является алгоритм QR . Сказав , что существует множество различных алгоритмов для вычисления сингулярного разложения родового матрицы с размерностью матрицы . Отличная схема по проблеме, доступной здесь (из документации Intel MKL ), выглядит следующим образом:MNAвведите описание изображения здесь

Как вы видите, в зависимости от вашего варианта использования существуют разные подходы (обычные соглашения об именах можно найти здесь ). Это связано с тем, что, например, существуют матричные формы, где сокращение домохозяев может быть более дорогим, чем ротация Гивенса (чтобы назвать два «очевидных» способа получения QR). Стандартным справочником по этому вопросу являются Матричные вычисления Голуба и Ван Лоана (я бы предложил использовать по крайней мере 3-е издание). Я также нашел Å. Бьорк в Численные методы наименьших квадратов проблем очень хороший ресурс по этому вопросу; Хотя СВД не является основной темой книги, она помогает контекстуализировать ее использование.

Если я должен дать вам один общий совет по этому вопросу , не пытайтесь писать свои собственные алгоритмы SVD, если вы уже не успешно прошли пару классов по числовой линейной алгебре и не знаете, что делаете. Я знаю, это звучит нелогично, но на самом деле, существует масса вещей, которые могут пойти не так, и вы в конечном итоге получите (в лучшем случае) неоптимальные реализации (если не ошибаюсь). Есть несколько очень хороших бесплатных наборов по этому вопросу (например, Eigen , Armadillo и Trilinos ).

usεr11852 говорит восстановить Monic
источник
XA
1
MNAXTX
2
Да, я был неправ: QR не ограничивается квадратными матрицами. +1, кстати. Этот вопрос был одним из самых популярных без ответа на вопрос с тегом pca , поэтому приятно видеть, что на него, наконец, ответили.
говорит амеба, восстанови Монику
В вашем ответе не упоминается целый ряд итерационных алгоритмов. Это было нарочно? Кто-то задавал вопрос об итерационных алгоритмах SVD, см. Какие бывают быстрые алгоритмы для вычисления усеченного SVD? , и я разместил ответ там, пытаясь обеспечить некоторый обзор. Возможно, нам следует хотя бы перекрестно связать наши ответы. И было бы неплохо, если бы вы могли расширить свои знания, обсудив QR-алгоритмы и итеративные алгоритмы.
амеба говорит восстановить Монику
Нет, это было случайно. Вы ответили на свой вопрос в своем посте, хотя; усеченные SVD - это по существу усеченные собственные разложения (см., например, ARPACK ). Есть некоторые отличия, но они в порядке ; Некоторое программное обеспечение (например, MATLAB svds) просто использует свою усеченную функцию SVD в качестве оболочки для своих усеченных процедур собственного разложения ( eigs).
usεr11852 говорит восстановить Monic