Швидке визначення того, чи є щільна матриця низького рангу


13

У програмному проекті, над яким я працюю, певні обчислення значно простіші для щільних матриць низького рангу. Деякі проблемні випадки включають щільні матриці низького рангу, але вони мені надаються в повному обсязі, а не як фактори, тому мені доведеться перевірити рангову та факторну матрицю, якщо я хочу скористатись структурою низького рангу. .

Матриці, про які йдеться, як правило, повністю або майже повністю щільні, з n становлять від ста до кількох тисяч. Якщо матриця має низький ранг (скажімо, менше 5 - 10), то для обчислення SVD та використання його формують низькорозрядну факторизацію варто зусиль. Однак, якщо матриця не має низького рангу, тоді зусилля будуть витрачені даремно.

Таким чином, я хотів би знайти швидкий і досить надійний спосіб визначити, чи низький рівень чи ні, перш ніж вкладати зусилля, щоб зробити повну SVD-факторизацію. Якщо в будь-який момент стане зрозуміло, що ранг вище відрізаного, процес може негайно припинитися. Якщо процедура помилково оголошує матрицю низького рангу, якщо її немає, це не є величезною проблемою, оскільки я все ще буду робити повний SVD для підтвердження низького рангу та знаходження низького рангу.

Опції, які я розглядав, включають ранг, що виявляє LU або QR-факторизацію з подальшим повним SVD як перевірку. Чи є інші підходи, які я повинен розглянути?

Відповіді:


8

k

[R1R120R22],
R1k×kR22kR22εAεз матриці рангу ; інакше цього не повинно бути (забороняючи числові помилки).k

Ця процедура коштує для щільної матриці .O(n2k)n×n


Це по суті той підхід, який я описав у питанні. Я думаю, що запропонована відповідь Вольфганга Бангерта могла б зробити краще, ніж . O(n2k)
Брайан Борчерс

7

Проблема, звичайно, полягає в тому, що обчислення справжнього рангу (наприклад, за допомогою розкладання QR) насправді не дешевше, ніж обчислення низького рангу представлення матриці.

Найкраще, що ви можете зробити, це використовувати рандомізований алгоритм, щоб знайти наближення низького рангу. Вони, принаймні теоретично, можуть бути значно швидшими, ніж робота над всією матрицею, оскільки, по суті, вони лише обчислюють декомпозиції для проекцій матриці на випадкові підпростори.

Чи варто цього для матриці розміром може бути хорошим питанням, але якщо ваші проблеми дійсно стануть великими, я б підозрював, що вона окупиться.100×100


З того, що мені відомо про ці алгоритми, вони виробляють матрицю низького рангу, яка досить близька за нормою до даної матриці. Мені потрібно знати, чи є (наприклад) матриця рангу-10 або менше, яка дуже близька до заданої матриці (скажімо відносна помилка 1,0е-10 або вище.)
Брайан Борчерс

Так, але ви також можете зробити QR-декомпозицію проектованої (маломірної) матриці, і якщо ця декомпозиція виявить відсутність повного рангу, тоді ви також матимете оригінальну матрицю з дефіцитом рангу. Хіба це не той критерій, який вам потрібен для розкладання QR на вихідній матриці?
Вольфганг Бангерт

Я бачу, що ранг проектованої матриці менший або дорівнює (кількість рядків у випадковій матриці, яку я множу на A), і ранг A. Якщо він є рангом , то початковою матрицею не може бути рангу або менше. Якщо він має ранг менше то я міг би просто не пощастити, або мав ранг менше . Знаходження рангу по матриця може бути зроблено в час. Однак, якщо випадкова матриця, яку я помножую на раз , щільна, калічення приймаєkkk1kAkknO(k2n)AO(kn2)час. Чи є малі матриці, які зберігають ранг з високою ймовірністю?
Брайан Борчерс

Не знаю. Я погоджуюся (і мається на увазі), що алгоритм може сказати вам лише, якщо матриця не є повною мірою. Він не може сказати вам , якщо матриця є повним ранг , якщо не брати все випадкових напрямків. Я сподіваюся, що ви отримаєте відповідь на досить малий де . k=nkkn2n3
Вольфганг Бангерт

1

Ще один підхід, який варто спробувати, - це використовувати адаптивне перехресне наближення (ACA). Це досить популярний алгоритм, який має багато реалізацій, доступних в Інтернеті. Для довідки ви можете ознайомитися з оригінальним папером:

ACA та його варіації (скажімо, ACA +, гібридне перехресне наближення HCA) можуть використовуватися в різних сценаріях. Ви, вже обчисливши всю щільну матрицю, є одним із сприятливих, оскільки ви зможете точно обчислити залишки, якщо буде потрібно.

Якщо евристичних залишків (див. Алгоритм) достатньо, я вважаю, що ваша складність буде , де - розмір квадратної матриці, а - ранг. Зауважимо, що ранг є функцією встановленого допуску скорочення . У той час як точні та гарантовані межі помилок потребуватимуть .O(Nr)Nr(ϵ)rϵO(N2r)


0

Для простого випадку, коли матриця є симетричною позитивно-визначеною, обчисліть її скажіть 20 найбільших власних значень і подивіться, чи вони , або порівняйте норми. ARPACK швидко для цього; що важливіше, їй потрібна лише функція . Отже, для загального , погляньте на власні значення (як на LinOp, не поглинаючи його.)A0xAxAATA

scipy.sparse.linalg.svds робить це: LinOp Arpack, для будь-якого розміру:(ATA)A

from scipy.sparse.linalg import svds
sing = svds( A, k=20, tol=1e-4, return_singular_vectors=False )  # v0=random
# runtimes on random-normal n x n:
# n = 100, 1k, 2k
#       5, 130, 770 ms
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.