exponenta event banner

svdsketch

Вычислить SVD эскиза матрицы низкого ранга

Описание

пример

[U,S,V] = svdsketch(A) возвращает разложение сингулярного значения (SVD) эскиза матрицы низкого ранга входной матрицы A. Эскиз матрицы представляет собой аппроксимацию низкого ранга, которая отражает только наиболее важные особенности A (до допуска), что позволяет быстрее вычислять частичный SVD больших матриц по сравнению с использованием svds.

пример

[U,S,V] = svdsketch(A,tol) задает допуск для эскиза матрицы. svdsketch использование tol адаптивно определить ранг аппроксимации эскиза матрицы. По мере увеличения допуска уменьшается количество элементов A используются в эскизе матрицы.

пример

[U,S,V] = svdsketch(A,tol,Name,Value) указывает дополнительные параметры с одним или несколькими Name,Value аргументы пары. Например, можно указать 'MaxIterations' и скаляр для корректировки количества итераций, используемых для формирования эскиза матрицы.

пример

[U,S,V,apxErr] = svdsketch(___) дополнительно возвращает вектор apxErr который содержит относительную аппроксимационную ошибку в каждой итерации, norm(U*S*V'-A,'fro')/norm(A,'fro'). Заключительная запись в векторе apxErr(end) - относительная аппроксимационная ошибка выходного сигнала, возвращаемого svdsketch.

Примеры

свернуть все

Использовать svdsketch для вычисления коэффициентов SVD аппроксимации матрицы низкого ранга.

Использовать gallery для создания случайной матрицы 200 на 200 с геометрически распределенными сингулярными значениями.

A = gallery('randsvd',200);

Использовать svdsketch для вычисления SVD низкоранговой аппроксимации A.

[U,S,V] = svdsketch(A);

Проверьте размер выходов.

size(S)
ans = 1×2

   120   120

Результаты показывают, что матричное приближение низкого ранга A имеет звание 120.

Задание допуска с помощью svdsketch для вычисления коэффициентов SVD аппроксимации матрицы низкого ранга. svdsketch адаптивно определяет соответствующий ранг эскиза матрицы на основе заданного допуска.

Использовать gallery для создания случайной матрицы 200 на 200 с геометрически распределенными сингулярными значениями.

A = gallery('randsvd',200);

Использовать svdsketch для расчета SVD низкоранговой аппроксимации A. Укажите допуск 1e-2и найти размер вывода S для определения ранга svdsketch использует для эскиза матрицы.

tol = 1e-2;
[U,S,V] = svdsketch(A,tol);
size(S)
ans = 1×2

    60    60

Результаты показывают, что матричное приближение низкого ранга A имеет звание 60.

Анализ аппроксимации эскиза матрицы A сравнивая A кому U*S*V'.

norm(U*S*V' - A,'fro')/norm(A,'fro')
ans = 0.0048

Результат показывает, что эскиз матрицы аппроксимирован A в пределах указанного допуска 1e-2.

Использовать svdsketch с MaxSubspaceDimension на матрице, которая имеет медленно затухающие сингулярные значения. Этот параметр можно использовать для принудительного использования svdsketch для использования подмножества функций A в эскизе матрицы.

Создайте матрицу 5000 на 5000 со значениями, полученными из стандартного нормального распределения. Просмотр распределения сингулярных значений матрицы.

A = randn(5000);
semilogy(svd(A),'-o')

Figure contains an axes. The axes contains an object of type line.

Поскольку сингулярные значения в A медленно распадаются, A имеет много важных особенностей и не поддается низкоранговым приближениям. Чтобы сформировать эскиз матрицы, который разумно аппроксимирует A, большинство или почти все элементы должны быть сохранены.

Использовать svdsketch на матрице с допуском 1e-5. Укажите четыре выхода, чтобы вернуть коэффициенты SVD, а также относительную ошибку аппроксимации в каждой итерации.

tol = 1e-5;
[U1,S1,V1,apxError1] = svdsketch(A,tol);
size(S1)
ans = 1×2

        5000        5000

Размер S указывает, что для удовлетворения допуска, svdsketch необходимо сохранить все особенности A. Для больших разреженных входных матриц это может представлять проблемы с памятью, поскольку аппроксимация низкого ранга A образованные svdsketch приблизительно тот же размер, что и A и, таким образом, может не поместиться в памяти в виде плотной матрицы.

Проверьте погрешность аппроксимации выходов. С тех пор svdsketch сохраняет все в A, вычисленный ответ является точным, но вычисление было просто дорогостоящим способом вычисления svd(X).

apxError1(end)
ans = 1.9075e-08

Теперь выполните тот же расчет, но укажите MaxSubspaceDimension 650 для ограничения размера подпространства, используемого для построения эскиза A. Это полезно, чтобы заставить svdsketch для использования только подмножества элементов в A для формирования эскиза матрицы, уменьшая размер выходных данных.

[U2,S2,V2,apxError2] = svdsketch(A,tol,'MaxSubspaceDimension',650);
size(S2)
ans = 1×2

   650   650

Теперь выходные данные имеют меньший размер.

Проверьте погрешность аппроксимации новых выходов. Компромисс для того, чтобы заставить выходные сигналы быть меньше, заключается в том, что многие важные признаки А должны быть опущены в эскизе матрицы, и результирующее приближение ранга 650 A не соответствует указанному допуску.

apxError2(end)
ans = 0.8214

Входные аргументы

свернуть все

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

Типы данных: single | double
Поддержка комплексного номера: Да

Допуск эскиза матрицы, заданный как вещественный числовой скаляр в диапазоне sqrt(eps(class(A))) <= tol < 1.

svdsketch использует значение tol адаптивно определить, какие особенности A для использования в низкоранговой аппроксимации (матричный эскиз) A. В качестве значения tol увеличение, svdsketch использует меньше возможностей A для формирования эскиза матрицы.

Пример: [U,S,V] = svdsketch(A,1e-4)

Типы данных: single | double

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: [U,S,V] = svdsketch(A,1e-10,'MaxIterations',100) использует 100 итераций в svdsketch алгоритм.

Максимальная размерность подпространства, заданная как положительный целочисленный скаляр. Измерение подпространства управляет потреблением памяти svdsketch алгоритм. Если в алгоритме недостаточно памяти для указанного допуска, можно указать меньшее значение для MaxSubspaceDimension чтобы алгоритм оставался в памяти. Например, настройка этого параметра может быть полезна, когда A имеет сингулярные значения, которые медленно распадаются.

При указании MaxSubspaceDimension задается максимальное значение ранга эскиза матрицы, используемого svdsketch. Следовательно, если svdsketch не может удовлетворять указанному допуску с рангом меньше MaxSubspaceDimension, он использует максимально допустимый ранг, и результирующие выходы могут не удовлетворять указанному допуску.

Пример: [U,S,V] = svdsketch(A,1e-7,'MaxSubspaceDimension',150)

Типы данных: single | double

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

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

При указании BlockSize, значение должно быть меньше, чем MaxSubspaceDimension.

Пример: [U,S,V] = svdsketch(A,1e-7,'BlockSize',10)

Типы данных: single | double

Максимальное число итераций алгоритма, указанное как положительный целочисленный скаляр. Большее количество итераций может создать более качественный эскиз матрицы за счет большего времени выполнения и большего потребления памяти.

Пример: [U,S,V] = svdsketch(A,1e-7,'MaxIterations',25)

Типы данных: single | double

Число степенных итераций, указанное как неотрицательный целочисленный скаляр. Итерации мощности улучшают ортогональность U и V выходы. Как правило, необходимо выбрать число итераций мощности 0, 1, или 2, поскольку большие значения могут неблагоприятно способствовать ошибке округления.

Пример: [U,S,V] = svdsketch(A,1e-7,'NumPowerIterations',2)

Типы данных: single | double

Выходные аргументы

свернуть все

Левые сингулярные векторы эскиза матрицы, возвращаемые в виде матрицы. Столбцы U являются ортонормированными и образуют набор базисных векторов для диапазона матричного эскиза A.

Размер U зависит от значения tol. Как tol становится больше, svdsketch использует меньшее количество элементов входной матрицы для формирования эскиза матрицы, поэтому U и V также имеют меньшее количество столбцов.

Различные машины и выпуски MATLAB ® могут создавать различные сингулярные векторы, которые все еще являются численно точными. Соответствующие столбцы вU и V могут перевернуть свои знаки, так как это не влияет на значение выражения A = U*S*V'.

Сингулярные значения эскиза матрицы, возвращаемые в виде квадратной диагональной матрицы. Диагональные элементы S - строго положительные сингулярные значения эскиза матрицы в порядке убывания.

Размер S зависит от значения tol. По мере увеличения допуска svdsketch использует меньшее количество элементов входной матрицы для формирования эскиза матрицы, поэтому S имеет соответственно меньше строк и столбцов.

Правые сингулярные векторы эскиза матрицы, возвращаемые в виде матрицы. Столбцы V являются ортонормированными и образуют набор базисных векторов для нулевого пространства матричного эскиза A.

Размер V зависит от значения tol. Как tol становится больше, svdsketch использует меньшее количество элементов входной матрицы для формирования эскиза матрицы, поэтому U и V также имеют меньшее количество столбцов.

Различные машины и версии MATLAB могут создавать различные сингулярные векторы, которые все еще являются численно точными. Соответствующие столбцы в U и V могут перевернуть свои знаки, так как это не влияет на значение выражения A = U*S*V'.

Относительная ошибка аппроксимации в каждой итерации, возвращаемая в виде вектора. Длина apxErr равно количеству итераций, используемых в svdsketch алгоритм. Использовать MaxIterations для корректировки количества итераций.

Записи apxErr - относительные аппроксимационные ошибки в каждой итерации, norm(U*S*V'-A,'fro')/norm(A,'fro'). Заключительная запись в векторе apxErr(end) - относительная аппроксимационная ошибка выходного сигнала, возвращаемого svdsketch.

Совет

  • Использовать svdsketch когда вы не знаете заранее, какой ранг указать svds, но вы знаете, какой допуск должно удовлетворять приближение SVD.

  • svds вычисляет наилучшую возможную аппроксимацию ранга-k SVD (используя значение по умолчанию "largest" метод). svdsketch не гарантирует, что его ранг-k аппроксимация является лучшим, что объясняет его скорость преимущество перед svds.

Алгоритмы

svdsketch применяет допуск для формирования A≈QB аппроксимации матрицы низкого ранга входной матрицы A. Эта аппроксимация низкого ранга называется матрицей. Эскиз матрицы сохраняет только важные элементы из Aфильтрация ненужной информации. Ошибка относительного приближения apxErr эскиз матрицы предназначен для удовлетворения заданного допуска tol:

esketch=‖QB−A‖F‖A‖F≤tol

Процесс svdsketch для формирования эскиза матрицы:

  • svdsketch формирует эскиз матрицы итеративно, при этом каждая итерация добавляет новые столбцы к Q и новые строки к B. Новые столбцы и строки создаются путем извлечения элементов из A используя матрицу случайной выборки. Можно управлять количеством столбцов и строк, добавленных в каждую итерацию, с помощью BlockSize пара имя-значение.

  • Во время каждой итерации svdsketch использует итерации мощности для улучшения ортогональности новых столбцов в Q. Можно настроить количество итераций мощности с помощью NumPowerIterations пара имя-значение.

  • Итерации для формирования эскиза матрицы останавливаются, когда количество столбцов в Q и строк в B достигает указанного значения для MaxSubspaceDimension, число итераций достигает MaxIterationsили сходится относительная аппроксимационная ошибка (apxErr <= tol).

  • Для повышения скорости сходимости svdsketch может увеличить указанное начальное значение для BlockSize от итерации к итерации, если затухание в apxErr недостаточно.

После формирования A≈QB эскиза матрицы svdsketch вычисляет разложение сингулярного значения (SVD) эскиза матрицы с помощью [U1,S,V] = svd(B,'econ'), такой, что

A≈QB= (QU1) SVH = USVH.

Если svdsketch способен отфильтровывать некоторые функции A на основе указанного допуска, тогда результирующие SVD-факторы содержат меньше сингулярных значений и сингулярных векторов, чем если бы полный SVD был выполнен на A.

Ссылки

[1] Юй, Вэньцзянь, Юй Гу и Яохан Ли. «Эффективные рандомизированные алгоритмы для аппроксимации матрицы низкого ранга с фиксированной точностью». Журнал SIAM по матричному анализу и приложениям 39, № 3 (август 2018): 1339-1359. https://doi.org/10.1137/17M1141977.

Представлен в R2020b