Evet, mevcut matrise yeni bir satır ekledikten sonra bir SVD ayrışması güncellenebilir.
Genel olarak bu "bir ekle " problem formülasyonu, sıralama bir güncelleme olarak bilinir . @Amoeba tarafından " özdeğer ayrışmasının etkili iki aşamalı güncellemeleri " ile sağlanan MathOverflow bağlantısı , konunun derinliklerine bakmaya başlamak istiyorsanız harika bir ilk adımdır; ilk makale sorunuza açık bir çözüm sağlar. Sadece birinci ve ikinci sırada ne anlama geldiğini açıklığa kavuşturmak için,bir* şekildedir:
bir*= A - u vT
Nerede u ve vo zaman buna bir rütbe bir güncelleme (veya pertürbasyon ) denir . Bu güncellemenin temeli Sherman-Morrison formülü ile belirlenir. . Eğer pertürbasyon birden fazla rütbeyse.
bir*= A - UVT
Woodbury formülü devreye giriyor. Bu formülleri görürseniz, çok fazla tersin olduğunu fark edeceksiniz. Bunları doğrudan çözemezsiniz. Zaten alt sistemlerinin büyük bir kısmını zaten çözdüğünüz için (yani zaten hesaplanmış bazı ayrışmalarınız vardır) bunları daha hızlı ve / veya daha kararlı tahminler elde etmek için kullanırsınız. (Bu yüzden insanlar hala bu alanı araştırıyorlar.) JE Gentle'ın " Hesaplamalı İstatistik " kitabını referans olarak çok kullandım; Sanırım Bölüm. 5 Sayısal Doğrusal Cebir sizi doğru şekilde kuracaktır. ( Harville'nin uber-classic: " İstatistikçinin Perspektifinden Matris Cebiri " şanssız bir şekilde sıralama güncellemelerine hiç dokunmuyor.)
Looking to the statistics/application side of things, rank one updates are common in recommender systems because one may have thousands of customer entries and recomputing the SVD (or any given decomposition for that matter) each time a new user registers or a new product is added or removed is quite wasteful (if not unattainable). Usually recommender system matrices are sparse and this makes the algorithms even more efficient. An accessible first paper is the "Fast online SVD revisions for lightweight recommender systems" manuscript by M. Brand.
Going to dense matrices I think that looking at the papers from Pattern Recognition and Imaging Processing can get you quite far on getting an actual algorithm to use. For example the papers:
- Ren ve Dai tarafından yüz tanıma için çift yönlü temel bileşenlerin artımlı öğrenilmesi (2009) ,
- Li ve ark. Tarafından artan ve sağlam altuzay öğrenmesi üzerine (2003) .
- Levey ve Lindenbaum tarafından ardışık Karhunen-Loeve bazında ekstraksiyon ve görüntülere uygulanması (2000) .
- Sağlam Görsel İzleme için Artımlı Öğrenme (2007) , Ross ve ark.
hepsinin özünde aynı sorunu ele aldığı görülüyor; yeni özellikler geliyor ve temsilimizi buna göre hızlı bir şekilde güncellememiz gerekiyor . Bu matrislerin simetrik veya hatta kare olmadığına dikkat edin. M. Brand'ın bir başka çalışması da bu sorunu ele alabilir (bkz. " İnce tekil değer ayrışmasında hızlı düşük rütbeli değişiklikler (2006) " - bu , yazının başında verilen MO bağlantısında da belirtilmiştir.) konuyla ilgili çok sayıda büyük makale var ama çoğu ağır matematiksel olma eğilimindedir (örneğin, Benaych-Georgesa ve Nadakuditi " Büyük dikdörtgen rasgele matrislerin düşük rütbeli sapmalarının tekil değerleri ve vektörleri (2012) ") ve yakında bir çözüm bulmaya yardımcı olacaklarını sanmıyorum. Görüntü İşleme literatürüne odaklanmanızı öneriyorum.
Ne yazık ki, rütbe bir güncelleme rutinleri için herhangi bir R uygulamasına rastlamadım. Computational Science SE'nin " Python, C veya Fortran'da Güncellenebilir SVD uygulaması " yanıtı, dikkate almak isteyebileceğiniz bir dizi MATLAB ve C ++ uygulaması verir. Genellikle R, Python vb. Uygulamaları C, C ++ veya FORTRAN uygulamaları etrafındaki sarmalayıcılardır.
rank 1 updates
. Brand'ın hafif tavsiye sistemleri için hızlı çevrimiçi SVD revizyonları erişilebilir bir ilk makaledir. Ne yazık ki R'de zaten uygulanmış SVD için bir şey görmedim. Cholesky güncellemeleri (varsaupdown
danMatrix
CHOLMOD sayesinde). matrisinizin esnekliği nihai çözümünüzden gerçekten farklı olacaktır; yoğun veya seyrek bir matris var mı?