Bu bir hata değil.
Yorumlarda (kapsamlı olarak) araştırdığımız gibi, iki şey oluyor. Birincisi, U sütunlarının SVD gereksinimlerini karşılamak için kısıtlanmasıdır: her birinin birim uzunluğu olmalı ve diğerlerine dik olmalıdır. Görüntüleme U rasgele matris oluşturulan rasgele bir değişken olarak X , belirli bir SVD algoritması ile biz, böylece bu dikkat k ( k + 1 ) / 2 fonksiyonel olarak bağımsız tahditleri sütunları arasında istatistiksel bağımlılıklar oluşturmak U .
Bu bağımlılıklar U bileşenleri arasındaki korelasyonları inceleyerek daha fazla veya daha az ölçüde ortaya çıkabilir , ancak ikinci bir fenomen ortaya çıkar : SVD çözümü benzersiz değildir. En azından, her U sütunu bağımsız olarak yok edilebilir ve k sütunları ile en az 2k farklı çözüm elde edilir . Güçlü korelasyonlar ( 1 / 2'yi aşan ) sütunların işaretleri uygun şekilde değiştirilerek oluşturulabilir. (Bunu yapmanın bir yolu, Amoeba'nın bu konudaki cevabına ilk yorumumda verilmiştir : Tüm u i i'yi , i = 1 ,k1 / 2uii,i=1,…,k aynı işarete sahip, hepsini eşit olasılıkla negatif ya da pozitif yapar.) Öte yandan, tüm korelasyonlar, işaretler rastgele, bağımsız olarak, eşit olasılıklarla seçilerek yok edilebilir. (Aşağıda "Düzenle" bölümünde bir örnek vereceğim.)
Dikkatle, U bileşenlerinin dağılım matrislerini okurken bu fenomenleri kısmen ayırt edebiliriz . İyi tanımlanmış dairesel bölgelerde neredeyse eşit olarak dağılmış noktaların ortaya çıkması gibi belirli özellikler bağımsızlık eksikliğine sahiptir. Net sıfır olmayan korelasyonlar gösteren dağılım grafikleri gibi diğerleri, algoritmada yapılan seçimlere açıktır - ancak bu seçimler sadece ilk etapta bağımsızlık olmaması nedeniyle mümkündür.
SVD (veya Cholesky, LR, LU, vb.) Gibi bir ayrışma algoritmasının nihai testi, iddia ettiği şeyi yapıp yapmadığıdır. Bu durumda bu SVD matrislerin üç döndüğünde kontrol etmek için yeterli (U,D,V) olduğu, X bir ürün ile, yukarı beklenen kayan nokta hata geri kazanılır UDV′ ; U ve V sütunlarının ortonormal olduğu; ve D nin diyagonal olduğu, diyagonal elemanları negatif değildir ve azalan sırada düzenlenmiştir. Bu tür testleri svd
algoritmaya uyguladımR
ve asla hatalı olduğunu bulamadık. Her ne kadar mükemmel bir güvence olsa da, çok fazla insan tarafından paylaşıldığına inandığım böyle bir deneyim, herhangi bir hatanın tezahür etmek için olağanüstü bir tür girdi gerektireceğini gösteriyor.
Aşağıda soruda dile getirilen belirli noktaların daha ayrıntılı bir analizi yer almaktadır.
R
'S svd
prosedürünü kullanarak , önce k arttıkça, U katsayıları arasındaki korelasyonların zayıfladığını, ancak bunların hala sıfır olmadığını kontrol edebilirsiniz. Sadece daha büyük bir simülasyon yapsaydınız, bunların önemli olduğunu görürdünüz. ( k=3 , 50000 iterasyonunun yeterli olması gerektiğinde.) Sorudaki iddianın aksine , korelasyonlar "tamamen ortadan kalkmaz".
İkincisi, bu fenomeni incelemenin daha iyi bir yolu , katsayıların temel bağımsızlığı sorununa geri dönmektir. Çoğu durumda korelasyonlar sıfıra yakın olma eğiliminde olmasına rağmen, bağımsızlık eksikliği açıkça görülmektedir. Bu, en çok U katsayılarının çok değişkenli dağılımını inceleyerek ortaya çıkar . Dağılımın doğası, sıfır olmayan korelasyonların (henüz) tespit edilemediği küçük simülasyonlarda bile ortaya çıkar. Örneğin, katsayıların dağılım grafiği matrisini inceleyin. Bu pratik olacak yapmak için, her bir simüle veri kümesi boyutunu ayarlamak 4 ve muhafaza k=2 , böylece,, 1000ve gerçekleşmeleri 4×2 matris U oluşturma, 1000×8 matris. İşte tam dağılım grafiği matrisi, değişkenler U içindeki konumlarına göre listelenmiştir :
Birinci sütun boyunca tarama arasındaki bağımsızlık ilginç eksikliği ortaya u11 ve uij : ile ScatterPlot üst çeyrek nasıl görünüm u21 , örneğin, neredeyse boş olduğu; veya (u11,u22) ilişkisini ve (u21,u12) çifti için aşağı doğru eğimli bulutu açıklayan eliptik yukarı doğru eğimli bulutu inceleyin . Yakından bakıldığında, bu katsayıların neredeyse tamamı arasında açık bir bağımsızlık eksikliği ortaya çıkıyor: birçoğu sıfıra yakın korelasyon sergilemelerine rağmen, çok azı uzaktan bağımsız görünmektedir.
(Not: Dairesel bulutların çoğu, her bir sütunun tüm bileşenlerinin karelerinin toplamını birlik olmaya zorlayan normalleştirme koşulu tarafından oluşturulan bir hipersferden projeksiyonlardır.)
k=3 ve k=4 olan dağılım grafiği matrisleri benzer paternler sergiler: bu fenomenler k=2 sınırlı değildir , ne de her bir simüle edilmiş veri kümesinin boyutuna bağlı değildir: oluşturulması ve incelenmesi daha da zorlaşır.
Bu örüntülerin açıklamaları , tekil değer ayrışmasında U elde etmek için kullanılan algoritmaya gider , ancak bu tür bağımsızlık örüntülerinin U'nun çok tanımlayıcı özellikleri tarafından var olması gerektiğini biliyoruz : çünkü birbirini takip eden her sütun bir öncekine (geometrik) dik bu diklik koşulları, katsayılar arasında fonksiyonel bağımlılıklar uygular ve bu da karşılık gelen rastgele değişkenler arasında istatistiksel bağımlılıklara dönüşür.U
Düzenle
Yorumlara yanıt olarak, bu bağımlılık fenomenlerinin altta yatan algoritmayı (bir SVD hesaplamak için) ne ölçüde yansıttığına ve sürecin doğasında ne kadar doğal olduğuna dikkat çekmeye değer olabilir.
Belirli katsayıları arasındaki korelasyonlar desenler SVD algoritması tarafından yapılan rasgele tercihleri üzerinde büyük bir bağımlı çözümü tek değil: sütunları U bağımsız olarak her zaman ile çarpılabilir −1 ya da 1 . İşareti seçmek için gerçek bir yol yoktur. Bu nedenle, iki SVD algoritması farklı (keyfi veya belki de rastgele) işaret seçimleri yaptığında, (uij,ui′j′) değerlerinin farklı dağılım grafikleriyle sonuçlanabilir . Bunu görmek isterseniz, stat
aşağıdaki koddaki işlevi
stat <- function(x) {
i <- sample.int(dim(x)[1]) # Make a random permutation of the rows of x
u <- svd(x[i, ])$u # Perform SVD
as.vector(u[order(i), ]) # Unpermute the rows of u
}
Bu, ilk olarak gözlemleri rastgele yeniden sıralar x
, SVD gerçekleştirir, ardından u
orijinal gözlem sırasına uyması için ters sıralamayı uygular . Etki, orijinal dağılım grafiklerinin yansıtılmış ve döndürülmüş versiyonlarının karışımlarını oluşturmak olduğundan, matristeki dağılım grafikleri çok daha düzgün görünecektir. Tüm örnek korelasyonlar sıfıra çok yakın olacaktır (yapı ile: temeldeki korelasyonlar tamamen sıfırdır). Bununla birlikte, bağımsızlık eksikliği hala açık olacaktır (özellikle ui,j ve ui,j′ arasında görünen homojen dairesel şekillerde ).
Orijinal dağılım grafiklerinin bazılarının bazı kadranlarındaki veri eksikliği (yukarıdaki şekilde gösterilmiştir), R
SVD algoritmasının sütunlar için işaretleri nasıl seçtiğinden kaynaklanmaktadır .
Sonuçlar hakkında hiçbir şey değişmez. U ikinci sütunu birinciye dik olduğundan, (çok değişkenli rasgele değişken olarak kabul edilir) birincisine bağımlıdır (ayrıca çok değişkenli rasgele değişken olarak da kabul edilir). Bir sütunun tüm bileşenlerinin diğerinin tüm bileşenlerinden bağımsız olmasını sağlayamazsınız; yapabileceğiniz tek şey verilere bağımlılıkları gizleyecek şekilde bakmaktır - ancak bağımlılık devam edecektir.
Burada k > 2R
vakalarını işlemek ve dağılım grafiği matrisinin bir kısmını çizmek için güncellenmiş kod .k>2
k <- 2 # Number of variables
p <- 4 # Number of observations
n <- 1e3 # Number of iterations
stat <- function(x) as.vector(svd(x)$u)
Sigma <- diag(1, k, k); Mu <- rep(0, k)
set.seed(17)
sim <- t(replicate(n, stat(MASS::mvrnorm(p, Mu, Sigma))))
colnames(sim) <- as.vector(outer(1:p, 1:k, function(i,j) paste0(i,",",j)))
pairs(sim[, 1:min(11, p*k)], pch=".")