Dalam proyek perangkat lunak yang saya kerjakan, perhitungan tertentu jauh lebih mudah untuk matriks peringkat rendah yang padat. Beberapa contoh masalah melibatkan matriks peringkat rendah yang padat, tetapi mereka diberikan kepada saya secara penuh, bukan sebagai faktor, jadi saya harus memeriksa peringkat dan faktor matriks jika saya ingin mengambil keuntungan dari struktur peringkat rendah .
Matriks yang dimaksud biasanya sepenuhnya atau hampir sepenuhnya padat, dengan n berkisar dari seratus hingga beberapa ribu. Jika sebuah matriks memiliki peringkat rendah (katakanlah kurang dari 5 sampai 10), maka menghitung SVD dan menggunakannya membentuk faktorisasi peringkat rendah yang sepadan dengan usaha. Namun, jika matriksnya bukan peringkat rendah, maka upaya itu akan sia-sia.
Jadi saya ingin menemukan cara yang cepat dan cukup andal untuk menentukan apakah peringkatnya rendah atau tidak sebelum menginvestasikan upaya untuk melakukan faktorisasi SVD lengkap. Jika pada suatu saat menjadi jelas bahwa peringkat berada di atas cutoff, prosesnya dapat segera berhenti. Jika prosedur tersebut secara keliru menyatakan bahwa matriksnya berpangkat rendah ketika tidak, ini bukan masalah besar, karena saya masih akan melakukan SVD penuh untuk mengkonfirmasi peringkat rendah dan menemukan faktorisasi peringkat rendah.
Opsi yang saya pertimbangkan termasuk peringkat yang mengungkapkan LU atau faktorisasi QR diikuti oleh SVD lengkap sebagai cek. Apakah ada pendekatan lain yang harus saya pertimbangkan?
sumber
Masalahnya, tentu saja, adalah bahwa menghitung peringkat sebenarnya (misalnya, melalui dekomposisi QR) tidak benar-benar lebih murah daripada menghitung representasi matriks peringkat-rendah.
Yang terbaik yang dapat Anda lakukan adalah menggunakan algoritma acak untuk menemukan perkiraan peringkat rendah. Ini dapat, setidaknya secara teori, secara signifikan lebih cepat daripada bekerja pada seluruh matriks karena, pada dasarnya, mereka hanya menghitung dekomposisi untuk proyeksi matriks ke ruang bagian acak.
Entah itu layak untuk ukuran matriks mungkin merupakan pertanyaan yang bagus, tetapi jika masalah Anda benar-benar menjadi besar, saya akan curiga bahwa itu terbayar.100×100
sumber
Pendekatan lain yang patut dicoba adalah dengan menggunakan Adaptive Cross Approximation (ACA). Ini adalah algoritma yang cukup populer yang memiliki banyak implementasi online yang tersedia. Untuk referensi, Anda dapat melihat kertas asli:
ACA dan variasinya (katakanlah, ACA +, hybrid cross approximation HCA) dapat digunakan dalam berbagai skenario. Anda, yang sudah memiliki seluruh matriks padat dihitung adalah salah satu yang menguntungkan, karena Anda akan dapat menghitung residu persis jika diperlukan.
sumber
sumber