Soru:
Veri matrisinin sütunlarının (özelliklerinin) sayısını azaltmak için boyutsallık azaltmada SVD nasıl kullanılır?
covfefe
2014-07-11 03:25:46 UTC
view on stackexchange narkive permalink

Orijinal verilerimde satırlardan (kullanıcılar) çok daha fazla sütun (özellik) var. SVD'min özelliklerini azaltmaya çalışıyorum (tüm satırlara ihtiyacım var). Bunu yapmanın bir yöntemini "Makine Öğrenimi Eylemde" adlı bir kitapta buldum, ancak kullandığım veriler için işe yarayacağını düşünmüyorum.

Yöntem aşağıdaki gibidir. SVD'yi $$ A = USV ^ \ top olarak tanımlayın. $$

Bir optimizasyon eşiği ayarlayın (yani% 90). Köşegen $ S $ matrisinin karelerinin toplamını hesaplayın. Toplam kareler toplamının% 90'ına ulaşmak için kaç $ S $ değeri gerektiğini hesaplayın. Yani bu 100 $ S $ değeri çıkarsa, o zaman $ U $ matrisinin ilk 100 sütununu, $ V ^ \ top $ matrisinin ilk 100 satırını ve $ 100 \ times 100 $ kare matrisini alırdım. $ S $ matrisinin dışında. Daha sonra, indirgenmiş matrisleri kullanarak $ A = USV ^ \ top $ 'ı hesaplardım.

Ancak, sonuçta ortaya çıkan $ A $ matrisinin boyutları, öncekiyle aynı. Orijinal matrisimin sütunlarını nasıl hedeflerim?

Buraya bakın: http://scikit-learn.org/stable/modules/decomposition.html#truncated-singular-value-decomposition-and-latent-semantic-analysis
Iki yanıtlar:
amoeba
2014-12-12 03:13:10 UTC
view on stackexchange narkive permalink

@davidhigh'ın yazdığı doğru: $ \ mathbf U_ \ mathrm {r} $, $ \ mathbf S_ \ mathrm {r} $ ve $ \ mathbf V_ \ mathrm {r} $ 'ın indirgenmiş sürümlerini çarparsanız, Sorunuzda açıkladığınız gibi, bir $$ \ tilde {\ mathbf A} = \ mathbf U_ \ mathrm {r} \ mathbf S_ \ mathrm {r} \ mathbf V_ \ mathrm {r} ^ \ top matris elde edeceksiniz Öncekiyle tam olarak aynı boyutlara sahip, ancak düşük bir sıralaması olan $$.

Ancak, @davidhigh'ın eklemediği şey, istediğiniz şeyi azaltılmış olarak çarparak elde edebilmenizdi. yalnızca $ \ mathbf U_ \ mathrm {r} $ ve $ \ mathbf S_ \ mathrm {r} $ sürümleri, yani $$ \ mathbf B = \ mathbf U_ \ mathrm {r} \ mathbf S_ \ mathrm {r} hesaplama. $$ Bu matrisin (örneğinizde) yalnızca 100 $ sütunu vardır, ancak $ \ mathbf A $ ile aynı sayıda satır vardır. Matris $ \ mathbf V $ yalnızca bu azaltılmış 100 boyutlu uzaydan gelen verileri orijinal $ p $ boyutlu uzayınıza eşlemek için kullanılır. Eğer haritayı tekrar eşleştirmeniz gerekmiyorsa, $ \ mathbf V $ 'ı dışarıda bırakın ve işiniz bitti.

Bu arada, $ \ mathbf B $ matrisinin sütunları ne denilen şeyi içerecek Verilerinizin temel bileşenleri .

davidhigh
2014-07-11 03:56:27 UTC
view on stackexchange narkive permalink

Görünüşe göre SVD'nin ne yaptığının tam olarak farkında değilsiniz. Sizin yazdığınız gibi, bir $ \ mathbf A $ matrisini

$$ \ mathbf A = \ mathbf U \ mathbf S \ mathbf V ^ T, $$

ilgili matris boyutları ve özellikleriyle ilgili ayrıntılar, örneğin burada.

Şimdi, boyutluluk azaltımı diyagonal matris $ \ mathbf S $ içindeki küçük tekil değerler ihmal edilerek yapılır. Yaklaşık olarak sıfıra kaç tekil değer ayarladığınızdan bağımsız olarak, ortaya çıkan $ \ mathbf A $ matrisi her zaman orijinal boyutunu korur. Özellikle, herhangi bir satırı veya sütunu düşürmezsiniz.

Sonuç olarak, boyutsallık azaltma özelliğinden yalnızca ayrıştırılmış sürümde yararlanılır. Örneğin, 1. sıraya sahip çok büyük bir matrisi düşünün, yani sütun / satır vektörleri yalnızca tek boyutlu bir alt uzayı kapsar. Bu matris için, sıfır olmayan yalnızca bir tekil değer elde edeceksiniz. Şimdi, bu büyük matrisi depolamak yerine, iki vektör ve bir gerçek sayı da saklanabilir, bu da bir büyüklük sırası azalmaya karşılık gelir.

Yani doğru anlarsam, SVD yalnızca kullanılan depolamayı azaltmada işe yarar mı (orijinal matrisin özelliklerini korurken)? Aslında orijinal veri kümesinin boyutlarını azaltmaz (USV ^ T'yi çarpmak size A'yı orijinal boyutuyla verir) ve orijinal veri kümesi benzerlik algoritmalarını çalıştırmak için gereken şeydir.
SVD ile ne yapmak istediğinize bağlıdır. Hala SVD-azaltılmış matris $ \ mathbf A $ 'ı algoritmanıza beslerseniz, çaba aynı kalır, ancak maksimum varyansa (ve umarım gürültüyü filtreleyerek) yönlere konsantre olduğunuzda sonuçlar daha iyi olabilir. Bununla birlikte, ayrıştırmanın özelliklerini doğrudan algoritmanıza yerleştirmek de mümkündür (ancak bu, her tahmin için benzer bir ayrıştırma uygulamanız gerektiği anlamına gelir). ** Hedeflediğiniz algoritmik çabanın azaltılmasıysa, algoritmanızın ikili bir versiyonunu aramayı tercih ederim **
'İkili versiyon' ile neyi kastediyorsunuz? SVD'yi bir belge ve özellik matrisi üzerinde kullanıyorum ve önemsiz olanları ortadan kaldırarak özelliklerin sayısını azaltmayı umuyorum. Belgeler arasındaki benzerlikleri bulmak için indirgenmiş matrisi kullanmak istiyorum.


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...