Matrise yeni bir satır ekledikten sonra SVD ayrışmasını güncelleme


17

SVD ayrışması A = U S V with olan m × n boyutunda yoğun bir matrisine sahip olduğumu varsayalım .Am×n

A=USV.
In Rben SVD hesaplayabilirsiniz şöyle: svd(A).

A'ya yeni satır eklenirse , SVD'yi sıfırdan yeniden hesaplamaksızın eski SVD ayrışmasını eskisine göre (yani U , S ve V kullanarak ) hesaplayabilir misiniz?(m+1)AUSV


3
Literatürünü kontrol edin 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 (varsa updowndan MatrixCHOLMOD sayesinde). matrisinizin esnekliği nihai çözümünüzden gerçekten farklı olacaktır; yoğun veya seyrek bir matris var mı? A
usεr11852 diyor Reinstate Monic

2
+1 için @ usεr11852. Ayrıca QR'yi güncellemenin çok daha kolay ve daha standart olduğunu ve bazı uygulamalarda QR'nin yeterli olduğunu ve gerçekten SVD'ye ihtiyaç duymadığını unutmayın. Uygulamanızı da düşünün.
amip diyor Reinstate Monica

Evet, matris yoğundur.
user1436187

1
Daha sonra, öneri literatürünü 'kazın' ve görüntü işlemeye odaklanın. Turlarla ilgili benzer sorular bir veritabanında "yeni görüntüler" açısından da yayınlanmıştır. Örneğin benim önsezim, birinin özyüzlerinin girişlerini çevrimiçi olarak güncellemek için bir algoritmaya sahip olması gerektiğidir. Bu adamlar yoğun matris gösterimleri ile çalışır.
usεr11852 diyor Reinstate Monic

Yanıtlar:


14

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*=bir-uvT

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*=bir-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:

  1. Ren ve Dai tarafından yüz tanıma için çift yönlü temel bileşenlerin artımlı öğrenilmesi (2009) ,
  2. Li ve ark. Tarafından artan ve sağlam altuzay öğrenmesi üzerine (2003) .
  3. Levey ve Lindenbaum tarafından ardışık Karhunen-Loeve bazında ekstraksiyon ve görüntülere uygulanması (2000) .
  4. 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.


6
This is a nice commentary, but I was disappointed not to find an answer to the question. It turns out that another paper by Matthew Brand, linked to from the MO answer, contains an explicit solution.
whuber

5
Hem size hem de @whuber'a +1 (ve başka bir SE sitesinde sağlanan bilgilerin "kopyalanmasının" önleneceğini düşünmüyorum! Bu sitede sağlanan bilgileri kendi kendine devam ettirmeye çalışmamız gerektiğini savunuyorum. Gerçekten de, burada yer alan bilgilerin neredeyse tamamı bir anlamda mevcut ders kitaplarını, çevrimiçi kaynakları veya araştırma kağıtlarını çoğaltmaktadır). Bir soru: bir rütbe ya da daha yüksek rütbeli bir güncellemeden sonra matrisin tersinin nasıl değiştiğini açıklayan Sherman-Morrison ve Woodbury formüllerinden bahsettiniz; SVD ile ne ilgileri var?
amip diyor ki Reinstate Monica

1
İnsanları neden bu bağlantı için MO sayfalarına yönlendirmek isteyebileceğinizi anlıyorum, ancak doğrudan sorunu çözdüğünü belirtebilirsiniz! ("İyi bir ilk adım" çok büyük bir eksikliktir.) Yorumlarınızın çoğu, henüz iyi bir çözüm bulamadığınızı gösterecek şekilde yanlış anlaşılabilir.
whuber

1
@whuber: "İyi" "harika" oldu ve şimdi gazeteden de bahsettim, daha iyi mi? :) (Bu arada geri bildiriminiz için teşekkürler.)
usεr11852 diyor Reinstate Monic

2
Just for history's sake: Bunch and Nielsen were the first to demonstrate a way to update and downdate the SVD. Brand's method in effect generalizes the methods of this older paper.
J. M. is not a statistician
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.