Temel Bileşen Analizi ile Tekil Değer Ayrışması arasındaki ilişkiyi cebirsel / tam düzeyde anlıyorum. Benim sorum scikit-learn uygulaması hakkında .
Dokümantasyonda: " [TruncatedSVD] PCA'ya çok benzer, ancak her iki yaklaşım arasındaki cebirsel farkı yansıtan örnek vektörler üzerinde bir kovaryans matrisi yerine doğrudan çalışır. " Ancak, daha sonra şöyle der: " Bu tahminci [TruncatedSVD] iki algoritmayı destekler: hızlı rasgele bir SVD çözücü ve ARPACK'i (X * XT) veya (XT * X) üzerinde bir özdeyici olarak kullanan“ saf ”bir algoritma, hangisi daha fazlaysa verimli. ". PCA ile ilgilidiyor ki: "Verileri yansıtmak için Tekil Değer Ayrışımı kullanarak doğrusal boyutsal azalma ...". Ve PCA uygulaması aynı iki algoritmayı (randomize ve ARPACK) çözücülerin yanı sıra başka bir algoritmayı da destekler, LAPACK. Kod bakarak hem PCA hem de TruncatedSVD hem ARPACK ve LAPACK örnek veri X svd yapmak görebilirsiniz, ARPACK seyrek matrisler (svds kullanarak) başa çıkmak mümkün.
Bu nedenle, farklı özellikler ve yöntemlerin yanı sıra, PCA ek olarak LAPACK, PCA ve TruncatedSVD scikit-öğrenim uygulamaları kullanarak tam tekil değer ayrışması da tam olarak aynı algoritma gibi görünebilir. İlk soru: Bu doğru mu?
İkinci soru: LAPACK ve ARPACK scipy.linalg.svd (X) ve scipy.linalg.svds (X) kullanıyor olsalar da, X örnek matrisi olarak, veya X'in tekil değer ayrışmasını veya öz-ayrışmasını hesaplarlar ∗ X T dahili olarak. "Rasgele" çözücünün ürünü hesaplaması gerekmez. (Bu, sayısal kararlılıkla bağlantılıdır, bkz . Verilerin SVD'si yoluyla neden veri PCA? ). Bu doğru mu?