Misalkan saya memiliki matriks padat dari ukuran, dengan SVD dekomposisiDalam Aku dapat menghitung SVD sebagai berikut: .
R
svd(A)
Jika baris baru ditambahkan ke , dapatkah seseorang menghitung dekomposisi SVD baru berdasarkan yang lama (yaitu dengan menggunakan , , dan ), tanpa menghitung ulang SVD dari awal?A U S V
algorithms
svd
linear-algebra
matrix-decomposition
numerics
pengguna1436187
sumber
sumber
rank 1 updates
. Revisi SVD online cepat untuk sistem rekomendasi ringan oleh Brand adalah makalah pertama yang dapat diakses. Saya belum melihat sesuatu untuk SVD sudah diterapkan di R sayangnya. Pembaruan Cholesky ada (updown
dariMatrix
) berkat CHOLMOD. Kesederhanaan matriks akan benar-benar membuat perbedaan untuk solusi akhir Anda; apakah Anda menganggap matriks padat atau jarang?Jawaban:
Ya, seseorang dapat memperbarui dekomposisi SVD setelah menambahkan satu baris baru ke matriks yang ada.
Secara umum formulasi masalah " tambah satu " ini dikenal sebagai pembaruan peringkat satu . Tautan MathOverflow yang disediakan oleh @amoeba pada " pembaruan peringkat dua efisien dari dekomposisi nilai eigen " adalah langkah pertama yang bagus jika Anda ingin mulai melihat lebih dalam masalah ini; makalah pertama memberikan solusi eksplisit untuk pertanyaan spesifik Anda. Hanya untuk memperjelas apa arti peringkat satu dan dua agar Anda tidak bingung, jika baru Anda sedemikian rupa sehingga:A∗
Jika dan v adalah vektor, maka Anda merujuk ini sebagai pembaruan peringkat-satu (atau gangguan ). Dasar dari pembaruan ini ditentukan oleh rumus Sherman-Morrison. . Jika perturbasinya lebih dari satu pangkat yaitu. A ∗ = A - U V Tu v
yang rumus Woodbury datang ke dalam bermain. Jika Anda melihat formula ini, Anda akan melihat bahwa ada banyak invers yang terlibat. Anda tidak menyelesaikan ini secara langsung. Karena Anda telah menyelesaikan banyak subsistem mereka (mis. Anda memiliki beberapa dekomposisi yang sudah dihitung), Anda menggunakannya untuk mendapatkan perkiraan yang lebih cepat dan / atau lebih stabil. (Itu sebabnya orang masih meneliti bidang ini.) Saya telah menggunakan buku " Statistik Komputasi " oleh JE Gentle sebagai referensi; Saya pikir Bab. 5 Aljabar Linear Numerik akan mengatur Anda dengan benar. (The uber-klasik: " Aljabar Matriks Dari Perspektif Statistik " oleh Harville sayangnya tidak menyentuh pembaruan peringkat sama sekali.)
Melihat ke sisi statistik / aplikasi hal-hal, peringkat satu pembaruan adalah umum dalam sistem rekomendasi karena seseorang mungkin memiliki ribuan entri pelanggan dan menghitung ulang SVD (atau dekomposisi yang diberikan dalam hal ini) setiap kali pengguna baru mendaftar atau produk baru ditambahkan atau dihapus cukup boros (jika tidak bisa dicapai). Biasanya matriks sistem rekomendasi jarang dan ini membuat algoritma lebih efisien. Makalah pertama yang dapat diakses adalah naskah " Revisi SVD online cepat untuk sistem rekomendasi ringan " oleh M. Brand. Pergi ke matriks padat Saya pikir bahwa melihat kertas dari Pengenalan Pola dan Pencitraan Proses dapat membuat Anda cukup jauh dalam mendapatkan algoritma yang sebenarnya untuk digunakan. Misalnya makalah:
semua tampaknya menangani masalah yang sama di intinya; fitur-fitur baru hadir dan kami perlu memperbarui perwakilan kami dengan cepat . Perhatikan bahwa matriks ini tidak simetris atau bahkan kotak. Karya lain dari M. Brand juga dapat mengatasi masalah ini (lihat makalah " Modifikasi peringkat rendah cepat dari dekomposisi nilai singular tipis (2006) " - ini juga disebutkan dalam tautan MO yang diberikan di awal posting.) banyak makalah besar tentang masalah ini tetapi sebagian besar cenderung sangat matematis (misalnya makalah Benaych-Georgesa dan Nadakuditi pada " Nilai tunggal dan vektor gangguan peringkat rendah dari matriks acak persegi panjang besar (2012)") dan saya tidak berpikir mereka akan segera membantu mendapatkan solusi. Saya sarankan Anda tetap fokus pada literatur Pemrosesan Gambar.
Sayangnya saya belum menemukan implementasi R untuk rutinitas peringkat satu. Jawaban pada " Implementasi SVD yang dapat diupdate dalam Python, C, atau Fortran? " Dari SE Computational Science memberikan sejumlah implementasi MATLAB dan C ++ yang mungkin ingin Anda pertimbangkan. Biasanya implementasi R, Python, dll. Adalah pembungkus di sekitar implementasi C, C ++ atau FORTRAN.
sumber