Nhanh chóng xác định liệu một ma trận dày đặc có thứ hạng thấp hay không


13

Trong một dự án phần mềm mà tôi đang làm việc, một số tính toán nhất định dễ dàng hơn rất nhiều cho các ma trận thứ hạng thấp dày đặc. Một số trường hợp vấn đề liên quan đến ma trận thứ hạng thấp dày đặc, nhưng chúng được trao cho tôi đầy đủ, chứ không phải là các yếu tố, vì vậy tôi sẽ phải kiểm tra thứ hạng và yếu tố ma trận nếu tôi muốn tận dụng cấu trúc xếp hạng thấp .

Các ma trận trong câu hỏi thường dày đặc hoặc gần như hoàn toàn dày đặc, với n từ một trăm đến vài nghìn. Nếu một ma trận có thứ hạng thấp (giả sử dưới 5 đến 10), thì việc tính toán SVD và sử dụng nó tạo thành một hệ số thứ hạng thấp là đáng để nỗ lực. Tuy nhiên, nếu ma trận không có thứ hạng thấp, thì nỗ lực sẽ bị lãng phí.

Do đó, tôi muốn tìm một cách nhanh chóng và hợp lý đáng tin cậy để xác định xem thứ hạng có thấp hay không trước khi đầu tư nỗ lực để thực hiện một nhân tố SVD đầy đủ. Nếu tại bất kỳ thời điểm nào, rõ ràng thứ hạng nằm trên ngưỡng, quá trình có thể dừng lại ngay lập tức. Nếu thủ tục tuyên bố nhầm ma trận là thứ hạng thấp khi không, thì đây không phải là vấn đề lớn, vì tôi vẫn đang thực hiện một SVD đầy đủ để xác nhận thứ hạng thấp và tìm ra yếu tố xếp hạng thấp.

Các tùy chọn mà tôi đã xem xét bao gồm xếp hạng tiết lộ hệ số LU hoặc QR theo sau là một SVD đầy đủ làm kiểm tra. Có những cách tiếp cận khác mà tôi nên xem xét?

Câu trả lời:


8

k

[R1R120R22],
R1k×kR22kR22εAεtừ một ma trận thứ hạng ; nếu không thì không nên (chặn các lỗi số).k

Quy trình này có giá cho ma trận dày đặc .O(n2k)n×n


Đây thực chất là cách tiếp cận mà tôi đã mô tả trong câu hỏi. Tôi nghĩ rằng câu trả lời được đề xuất của Wolfgang Bangerth có thể làm tốt hơn O(n2k) .
Brian Borchers

7

Tất nhiên, vấn đề là việc tính toán thứ hạng thực sự (ví dụ, thông qua phân tách QR) không thực sự rẻ hơn so với tính toán một đại diện cấp thấp của ma trận.

Điều tốt nhất bạn có thể làm là sử dụng một thuật toán ngẫu nhiên để tìm các xấp xỉ thứ hạng thấp. Về mặt lý thuyết, chúng có thể nhanh hơn đáng kể so với làm việc trên toàn bộ ma trận bởi vì về bản chất, chúng chỉ tính toán các phép phân tách cho các phép chiếu của ma trận lên các không gian con ngẫu nhiên.

Liệu điều đó có xứng đáng với ma trận kích thước có thể là một câu hỏi hay không, nhưng nếu vấn đề của bạn thực sự trở nên lớn, tôi sẽ nghi ngờ rằng nó sẽ được đền đáp.100×100


Từ những gì tôi biết về các thuật toán này, chúng tạo ra một ma trận thứ hạng thấp gần hợp lý với ma trận đã cho. Tôi cần biết có hay không (ví dụ) ma trận hạng 10 trở xuống rất gần với ma trận đã cho (giả sử lỗi tương đối là 1.0e-10 hoặc tốt hơn.)
Brian Borchers

Có, nhưng bạn cũng có thể thực hiện phân tách QR của ma trận dự kiến ​​(chiều thấp) và nếu phân tách đó cho thấy thiếu thứ hạng đầy đủ, thì bạn cũng sẽ có ma trận gốc thiếu thứ hạng. Không phải đó là tiêu chí bạn cần để thực hiện phân tách QR trên ma trận gốc sao?
Wolfgang Bangerth

Tôi có thể thấy rằng thứ hạng của ma trận chiếu nhỏ hơn hoặc bằng (số lượng hàng trong ma trận ngẫu nhiên tôi nhân với A) và thứ hạng của A. Nếu nó có thứ hạng , thì ma trận gốc không thể là có thứ hạng trở xuống. Nếu nó có thứ hạng nhỏ hơn thì tôi có thể đã không may mắn hoặc có thứ hạng thấp hơn . Tìm thứ hạng của ma trận theo có thể được thực hiện trong thời gian . Tuy nhiên, nếu ma trận ngẫu nhiên mà tôi nhân với số lần dày đặc, thì phép nhân sẽ lấykkk-1kMộtkknÔi(k2n)MộtÔi(kn2)thời gian. Có ma trận thưa thớt giữ thứ hạng với xác suất cao?
Brian Borchers

Tôi không biết. Tôi đồng ý (và có nghĩa là ngụ ý) rằng thuật toán chỉ có thể cho bạn biết nếu một ma trận không có thứ hạng đầy đủ. Nó không thể cho bạn biết nếu ma trận thứ hạng đầy đủ trừ khi bạn thực hiện tất cả các hướng ngẫu nhiên . Hy vọng của tôi chỉ đơn giản là bạn sẽ nhận được câu trả lời cho k đủ nhỏ trong đó k n 2n 3 . k= =nkkn2«n3
Wolfgang Bangerth

1

Một cách tiếp cận khác đáng để thử là sử dụng xấp xỉ thích ứng chéo (ACA). Nó là một thuật toán khá phổ biến có nhiều triển khai có sẵn trực tuyến. Để tham khảo, bạn có thể xem bài báo gốc:

ACA và các biến thể của nó (giả sử, ACA +, HCA gần đúng chéo) có thể được sử dụng trong các tình huống khác nhau. Bạn, đã có toàn bộ ma trận dày đặc được tính toán là một trong những thuận lợi, vì bạn sẽ có thể tính toán phần dư chính xác nếu cần.

Nếu phần dư heuristic (xem thuật toán) đủ, tôi tin rằng độ phức tạp của bạn sẽ là , trong đó N là kích thước của ma trận vuông và r ( ϵ ) là thứ hạng. Lưu ý, mà cấp bậc r là một chức năng của sự khoan dung rút gọn quy định ε . Trong khi giới hạn lỗi chính xác và được bảo đảm sẽ yêu cầu O ( N 2 r ) .Ôi(Nr)Nr(ε)rεÔi(N2r)


0

Đối với trường hợp đơn giản trong đó ma trận là đối xứng dương xác định, hãy tính 20 giá trị riêng lớn nhất của nó và xem liệu chúng có 0 hay so sánh các chỉ tiêu. ARPACK là nhanh chóng cho điều này; quan trọng hơn, nó chỉ cần một hàm x AMột0 . Vì vậy, đối với tướng A , hãy nhìn vào giá trị riêng của A T A (dưới dạng LinOp, mà không cần khởi tạo nó.)xMộtxMộtMộtTMột

scipy.spzzy.linalg.svds thực hiện điều này: LinOp Arpack, cho A có kích thước bất kỳ:(MộtTMột)Một

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.