अलग-अलग परिणाम देने वाले विरल डेटा के आधार पर एक सहसंयोजक मैट्रिक्स के eigen और svd डिकम्पोज़िशन क्यों होते हैं?


12

मैं एक विरल / गैपी डेटा सेट के आधार पर एक सहसंयोजक मैट्रिक्स को विघटित करने की कोशिश कर रहा हूं। मैं देख रहा हूँ कि लैम्ब्डा (समझाया गया विचरण) का योग, जैसा कि गणना svdकी जा रही है, तेजी से गप्पी डेटा के साथ प्रवर्धित किया जा रहा है। अंतराल के बिना, svdऔर eigenसमान परिणाम प्राप्त करें।

यह एक eigenअपघटन के साथ नहीं लगता है । मैं प्रयोग करने की ओर झुकाव गया था svdक्योंकि लैंबडा मूल्य हमेशा सकारात्मक होते हैं, लेकिन यह प्रवृत्ति चिंताजनक है। क्या कुछ प्रकार का सुधार है जिसे लागू करने की आवश्यकता है, या मुझे svdइस तरह की समस्या से पूरी तरह से बचना चाहिए ।

###Make complete and gappy data set
set.seed(1)
x <- 1:100
y <- 1:100
grd <- expand.grid(x=x, y=y)

#complete data
z <- matrix(runif(dim(grd)[1]), length(x), length(y))
image(x,y,z, col=rainbow(100))

#gappy data
zg <- replace(z, sample(seq(z), length(z)*0.5), NaN)
image(x,y,zg, col=rainbow(100))


###Covariance matrix decomposition
#complete data
C <- cov(z, use="pair")
E <- eigen(C)
S <- svd(C)

sum(E$values)
sum(S$d)
sum(diag(C))


#gappy data (50%)
Cg <- cov(zg, use="pair")
Eg <- eigen(Cg)
Sg <- svd(Cg)

sum(Eg$values)
sum(Sg$d)
sum(diag(Cg))



###Illustration of amplification of Lambda
set.seed(1)
frac <- seq(0,0.5,0.1)
E.lambda <- list()
S.lambda <- list()
for(i in seq(frac)){
    zi <- z
    NA.pos <- sample(seq(z), length(z)*frac[i])
    if(length(NA.pos) > 0){
        zi <- replace(z, NA.pos, NaN)
    }
    Ci <- cov(zi, use="pair")
    E.lambda[[i]] <- eigen(Ci)$values
	S.lambda[[i]] <- svd(Ci)$d
}


x11(width=10, height=5)
par(mfcol=c(1,2))
YLIM <- range(c(sapply(E.lambda, range), sapply(S.lambda, range)))

#eigen
for(i in seq(E.lambda)){
    if(i == 1) plot(E.lambda[[i]], t="n", ylim=YLIM, ylab="lambda", xlab="", main="Eigen Decomposition")
    lines(E.lambda[[i]], col=i, lty=1)
}
abline(h=0, col=8, lty=2)
legend("topright", legend=frac, lty=1, col=1:length(frac), title="fraction gaps")

    #svd
for(i in seq(S.lambda)){
    if(i == 1) plot(S.lambda[[i]], t="n", ylim=YLIM, ylab="lambda", xlab="", main="Singular Value Decomposition")
    lines(S.lambda[[i]], col=i, lty=1)
}
abline(h=0, col=8, lty=2)
legend("topright", legend=frac, lty=1, col=1:length(frac), title="fraction gaps")

यहाँ छवि विवरण दर्ज करें


मुझे खेद है कि मैं आपके कोड (आर नहीं जानता) का पालन नहीं कर पा रहा हूं, लेकिन यहां एक या दो धारणाएं हैं। एक कोव के ईजन-अपघटन में नकारात्मक प्रतिजन दिखाई दे सकते हैं। मैट्रिक्स यदि कच्चे डेटा में कई लापता मूल्य थे और कोव की गणना करते समय उन्हें युग्मक रूप से हटा दिया गया था। इस तरह के मैट्रिक्स का SVD सकारात्मक रूप से उन नकारात्मक प्रतिजन को रिपोर्ट करेगा (भ्रामक रूप से)। आपकी तस्वीरों से पता चलता है कि दोनों eigen और svd decompositions समान रूप से व्यवहार करते हैं (यदि बिल्कुल समान नहीं) इसके अलावा केवल नकारात्मक मूल्यों के बारे में अंतर।
ttnphns

1
PS आशा है कि आप मुझे समझ गए होंगे: eigenvalues ​​का योग कोव के ट्रेस (विकर्ण राशि) के बराबर होना चाहिए। आव्यूह। हालांकि, एसवीडी इस तथ्य के लिए "अंधा" है कि कुछ प्रतिजन नकारात्मक हो सकते हैं। गैर-ग्रामियन कोव को विघटित करने के लिए एसवीडी का उपयोग शायद ही कभी किया जाता है। मैट्रिक्स, यह आमतौर पर या तो जानबूझकर ग्रामियन (सकारात्मक अर्धचालक) मैट्रिक्स के साथ या कच्चे डेटा के साथ प्रयोग किया जाता है
ttnphns

1
@ttnphns - आपकी जानकारी के लिए धन्यवाद। मुझे लगता है कि अगर मैं svdeigenvalues ​​के विभिन्न आकार के लिए नहीं थे , तो मैं इस परिणाम के बारे में चिंतित नहीं होता । परिणाम स्पष्ट रूप से अनुगामी eigenvalues ​​को अधिक महत्व देना चाहिए।
बॉक्स में मार्क

जवाबों:


4

आपको eigen मानों के पूर्ण मान का योग करना होगा, sum (abs (Eg $ values)) और एकवचन मानों के योग से तुलना करना। वे बराबर होंगे।

कारण यह है कि यदि आप उन पंक्तियों या स्तंभों को गुणा करते हैं जो ऋणात्मक eigenvalues ​​को से जोड़ते हैं, तो नए मैट्रिक्स का eigen-value सकारात्मक हो जाता है और eigen-vectors की orthogonality परेशान नहीं होती है।1

इस खूबसूरत प्रमेय के कायल होने का प्रमाण क्रांति के हाइपरबोलॉइड्स, जेवियर एफ। कैबरेरा, रैखिक बीजगणित और इसके अनुप्रयोगों, प्रिंसटन यूनिवर्सिटी (अब रटगर्स में) के बीजगणित में दिखाई दिया।

इस कारण से एक और तरीका यह है कि sqrt (eigen (t (Cg)% *% Cg)) Cg के एकवचन मान के बराबर है)। लेकिन जब प्रतिध्वनि नकारात्मक होती है, तो डेटा को एक हर्मिटियन रूप में दर्शाया जाना चाहिए जिसमें जटिल विमान को ध्यान में रखा जाता है, जो कि मूल सूत्रीकरण में चूक गया था, अर्थात नकारात्मक ईजीन के साथ मैट्रिक्स के सममित वर्ग-मूल द्वारा गठित डेटा। मूल्यों में जटिल प्रविष्टियाँ होंगी।


1
इस स्पष्टीकरण के लिए बहुत धन्यवाद। मैं eigen और svd के बीच के संबंध के बारे में जानता था, लेकिन इस बात से अनजान था कि वे मूल मैट्रिक्स को विघटित करने में उपरोक्त अंतर को देखते हुए अभी भी संबंधित होंगे। बस जिज्ञासु - जहां तक ​​मैं बता सकता हूं, एक मैट्रिक्स के "सकारात्मक निश्चित" नहीं होने पर एक ईजन अपघटन नकारात्मक मान देगा। क्या यह गप्पे के आंकड़ों के आधार पर सभी कोविरियस मैट्रीस के साथ होता है?
बॉक्स में मार्क

1
मार्क, एक वास्तविक सममित मैट्रिक्स की सकारात्मक निश्चितता सभी सकारात्मक eigenvalues ​​होने के बराबर है। "गैपी डेटा" के साथ कोई निकट संबंध नहीं है, यह समझना कि कई शून्य प्रविष्टियों के साथ विरल मैट्रिस का मतलब है। आखिरकार, नॉनसिंगुलर मैट्रिसेस (सममित या नहीं) के बीच बहुत ही कम विकर्ण हैं, जो उनके प्रवेश के रूप में उनके आइजनवेल्स को प्रदर्शित करते हैं।
whuber

@whuber - आपकी टिप्पणी के लिए धन्यवाद। इस मामले में, मैं "गप्पी" की व्याख्या "विरल" से अलग करता हूं कि गैर-मूल्य NaN हैं और न कि 0 (शून्य)। इस प्रकार सहसंयोजक मूल्यों को सामान्य मूल्यों (यानी n-1 द्वारा विभाजित) की संख्या से बढ़ाया जाता है। उस संबंध में, मुझे विश्वास नहीं है कि सहसंयोजक मैट्रिक्स वास्तव में किसी भी शून्य को समाहित करता है।
बॉक्स

1
इस तरह के लापता डेटा से सहसंयोजक मैट्रिक्स का अनुमान लगाने का एक तरीका खोजना एक चुनौती है: मैंने बहुत पहले एक समान प्रश्न पूछा था और कुछ उत्तेजक उत्तर प्राप्त किए थे।
whuber

: मैं (EOF) यहाँ विश्लेषण अनुभवजन्य ओर्थोगोनल समारोह में इस्तेमाल के लिए इस विषय में मेरी रुचि पर व्याख्या एक अतिरिक्त प्रश्न पूछा है stats.stackexchange.com/questions/34832/...
मार्क बॉक्स में
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.