एक यादृच्छिक मैट्रिक्स के लिए, एक SVD को कुछ भी स्पष्ट नहीं करना चाहिए? मैं क्या गलत कर रहा हूं?


13

अगर मैं पूरी तरह से यादृच्छिक डेटा से बना 2-डी मैट्रिक्स का निर्माण करता हूं, तो मैं पीसीए और एसवीडी घटकों को अनिवार्य रूप से कुछ भी नहीं समझाने की उम्मीद करूंगा।

इसके बजाय, ऐसा लगता है कि पहला SVD कॉलम 75% डेटा की व्याख्या करता प्रतीत होता है। यह संभवतः कैसे हो सकता है? मैं क्या गलत कर रहा हूं?

यहाँ साजिश है:

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

यहाँ आर कोड है:

set.seed(1)
rm(list=ls())
m <- matrix(runif(10000,min=0,max=25), nrow=100,ncol=100)
svd1 <- svd(m, LINPACK=T)
par(mfrow=c(1,4))
image(t(m)[,nrow(m):1])
plot(svd1$d,cex.lab=2, xlab="SVD Column",ylab="Singluar Value",pch=19)

percentVarianceExplained = svd1$d^2/sum(svd1$d^2) * 100
plot(percentVarianceExplained,ylim=c(0,100),cex.lab=2, xlab="SVD Column",ylab="Percent of variance explained",pch=19)

cumulativeVarianceExplained = cumsum(svd1$d^2/sum(svd1$d^2)) * 100
plot(cumulativeVarianceExplained,ylim=c(0,100),cex.lab=2, xlab="SVD column",ylab="Cumulative percent of variance explained",pch=19)

अपडेट करें

थैंक्यू @ ऐरॉन। ठीक है, जैसा कि आपने उल्लेख किया था, मैट्रिक्स को स्केलिंग जोड़ना था ताकि संख्या 0 के आसपास केंद्रित हो (यानी मतलब 0 है)।

m <- scale(m, scale=FALSE)

यहां सही छवि है, यादृच्छिक डेटा के साथ मैट्रिक्स के लिए दिखा रहा है, पहला एसवीडी कॉलम 0 के करीब है, जैसा कि अपेक्षित था।

सही की गई छवि


4
[0,1]100R100Rnn1/3n/3(n1)/121/12(n/3(n1)/12)/(n/3)=3/4+1/(4n)n=10075.25

जवाबों:


11

पहला पीसी समझा रहा है कि चर शून्य के आसपास केंद्रित नहीं हैं। पहले रैंडम करने या अपने रैंडम वेरिएबल को शून्य के आसपास केंद्रित करने से वह परिणाम होगा जिसकी आपको उम्मीद है। उदाहरण के लिए, इनमें से कोई भी:

m <- matrix(runif(10000,min=0,max=25), nrow=100,ncol=100)
m <- scale(m, scale=FALSE)

m <- matrix(runif(10000,min=-25,max=25), nrow=100,ncol=100)

3
आप एक अच्छा मुद्दा उठाते हैं, लेकिन मुझे लगता है कि यह केवल कहानी का एक हिस्सा बताता है। वास्तव में, मुझे लगता है कि ओपी इनमें से प्रत्येक की कोशिश करेगा और फिर भी परिणाम से आश्चर्यचकित होगा। इस तथ्य का तथ्य यह है कि क्योंकि आउटपुट में एकवचन मानों का आदेश दिया जाता है, वे प्रकट नहीं होंगे (और वास्तव में नहीं हैं) समान रूप से वितरित किए जाते हैं जैसा कि "यादृच्छिक" डेटा से भली-भांति उम्मीद की जा सकती है। Marchenko-Pastur वितरण इस मामले में उनके व्यवहार को नियंत्रित करता है।
कार्डिनल

@Aaron धन्यवाद, आप बिल्कुल सही थे। मैंने ऊपर सही किए गए आउटपुट का एक ग्राफ जोड़ा है, यह दिखाने के लिए कि परिणाम कितना सुंदर है।
कंटैंगो

1
@cardinal आपकी टिप्पणी के लिए धन्यवाद, आप बिल्कुल सही हैं (ऊपर दिए गए सही कोड द्वारा निर्मित ग्राफ देखें)। मेरा मानना ​​है कि एसवीडी मूल्य समान रूप से कम वितरित हो जाएंगे क्योंकि मैट्रिक्स छोटा हो जाता है, क्योंकि छोटे मैट्रिक्स में पैटर्न होने की अधिक संभावना होती है जो कि बड़ी संख्या के कानून द्वारा स्क्वैश नहीं किया जाएगा।
कंटैंगो

3

मैं एक अशक्त मॉडल तुलना के उपयोग के माध्यम से आपके प्रश्न का अधिक दृश्य उत्तर जोड़ूंगा। प्रक्रिया बेतरतीब ढंग से समग्र स्तंभ को संरक्षित करने के लिए प्रत्येक स्तंभ में डेटा फेरबदल करता है, जबकि चर (कॉलम) के बीच सहसंयोजक खो जाता है। यह कई बार किया जाता है और यादृच्छिक मैट्रिक्स में विलक्षण मानों के परिणामस्वरूप वितरण की तुलना मूल मूल्यों से की जाती है।

मैं मैट्रिक्स अपघटन prcompके svdलिए उपयोग करता हूं , लेकिन परिणाम समान हैं:

set.seed(1)
m <- matrix(runif(10000,min=0,max=25), nrow=100,ncol=100)

S <- svd(scale(m, center = TRUE, scale=FALSE))
P <- prcomp(m, center = TRUE, scale=FALSE)
plot(S$d, P$sdev) # linearly related

शून्य मॉडल की तुलना नीचे केंद्रित मैट्रिक्स पर की जाती है:

library(sinkr) # https://github.com/marchtaylor/sinkr

# centred data
Pnull <- prcompNull(m, center = TRUE, scale=FALSE, nperm = 100)
Pnull$n.sig
boxplot(Pnull$Lambda[,1:20], ylim=range(Pnull$Lambda[,1:20], Pnull$Lambda.orig[1:20]), outline=FALSE, col=8, border="grey50", log="y", main=paste("m (center=FALSE); n sig. =", Pnull$n.sig))
lines(apply(Pnull$Lambda, 2, FUN=quantile, probs=0.95))
points(Pnull$Lambda.orig[1:20], pch=16)

निम्नलिखित क्रमबद्ध मैट्रिक्स का एक बॉक्सप्लॉट है जो ठोस रेखा के रूप में दिखाए गए प्रत्येक विलक्षण मान के 95% मात्रात्मक के साथ है। पीसीए के मूल मूल्य mडॉट्स हैं। जो सभी 95% लाइन के नीचे स्थित हैं - इस प्रकार उनका आयाम यादृच्छिक शोर से अप्रभेद्य है।

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

एक ही प्रक्रिया mएक ही परिणाम के साथ -केंद्रित संस्करण पर की जा सकती है - कोई महत्वपूर्ण विलक्षण मान नहीं:

# centred data
Pnull <- prcompNull(m, center = FALSE, scale=FALSE, nperm = 100)
Pnull$n.sig
boxplot(Pnull$Lambda[,1:20], ylim=range(Pnull$Lambda[,1:20], Pnull$Lambda.orig[1:20]), outline=FALSE, col=8, border="grey50", log="y", main=paste("m (center=TRUE); n sig. =", Pnull$n.sig))
lines(apply(Pnull$Lambda, 2, FUN=quantile, probs=0.95))
points(Pnull$Lambda.orig[1:20], pch=16)

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

तुलना के लिए, आइए एक गैर-यादृच्छिक डेटासेट वाले डेटासेट को देखें: iris

# iris dataset example
m <- iris[,1:4]
Pnull <- prcompNull(m, center = TRUE, scale=FALSE, nperm = 100)
Pnull$n.sig
boxplot(Pnull$Lambda, ylim=range(Pnull$Lambda, Pnull$Lambda.orig), outline=FALSE, col=8, border="grey50", log="y", main=paste("m (center=FALSE); n sig. =", Pnull$n.sig))
lines(apply(Pnull$Lambda, 2, FUN=quantile, probs=0.95))
points(Pnull$Lambda.orig[1:20], pch=16)

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

यहाँ, 1 विलक्षण मान महत्वपूर्ण है, और कुल विचलन का 92% से अधिक समझाता है:

P <- prcomp(m, center = TRUE)
P$sdev^2 / sum(P$sdev^2)
# [1] 0.924618723 0.053066483 0.017102610 0.005212184

+1। आइरिस डेटासेट का उदाहरण दिलचस्प है, क्योंकि पहले दो पीसी (जैसे कि आपके स्वयं के पोस्ट में यहां आँकड़े ।stackexchange.com/a/88092 ) को देखते हुए यह बिल्कुल स्पष्ट है कि दूसरा कोई संकेत नहीं करता है। क्रमपरिवर्तन (उर्फ फेरबदल) परीक्षण इंगित करता है कि केवल 1 ही "महत्वपूर्ण" है। यह स्पष्ट है कि फेरबदल पीसी की संख्या को कम करने के लिए जाता है: पहले असली पीसी के बड़े संस्करण में फेरबदल किए गए पीसी में "फैल" होगा और दूसरे से शुरू होने वाले सभी को ऊपर उठाएगा। एक अधिक संवेदनशील परीक्षण तैयार कर सकता है जो उसके लिए खाता है लेकिन ऐसा बहुत कम किया जाता है।
अमीबा का कहना है कि मोनिका

@amoeba - उत्कृष्ट टिप्पणी। मैं पिछले कुछ समय से "फैलने वाले" प्रभाव के बारे में सोच रहा था। मुझे लगता है कि एक क्रॉस-मान्यता परीक्षण अधिक संवेदनशील लोगों में से एक हो सकता है जिसे आप संदर्भ देते हैं (उदाहरण के लिए आपका उत्तर यहां )? यदि आप एक उदाहरण / संदर्भ प्रदान कर सकते हैं तो बहुत अच्छा होगा।
बॉक्स

मैं आमतौर पर क्रॉस-वैलिडेशन (पुनर्निर्माण त्रुटि के आधार पर, यहां मेरे जवाब के अनुसार ) का उपयोग करना पसंद करता हूं , लेकिन मुझे वास्तव में यकीन नहीं है कि यह किसी तरह की असंवेदनशीलता से पीड़ित है या नहीं। Iris डेटासेट पर इसे आज़माने के लिए समझदारी चाहिए। फेरबदल आधारित दृष्टिकोणों के बारे में, मुझे इस "स्प्रेड आउट" के लिए लेखांकन का कोई संदर्भ नहीं पता है, मैं अभी कुछ लोगों को जानता हूं जो हाल ही में इस पर काम कर रहे थे। मुझे लगता है कि वे इसे जल्द ही लिखना चाहते थे। विचार उच्चतर फेरबदल वाले पीसी के संस्करण के लिए कुछ डाउनस्कूलिंग कारकों को पेश करना है।
अमीबा का कहना है कि मोनिका

@amoeba - उस लिंक के लिए धन्यवाद। यह मेरे लिए बहुत कुछ समझाता है। मुझे यह देखने में विशेष रूप से दिलचस्प लगा कि पीसीए में क्रॉस वेलिडेशन उन तरीकों का उपयोग करता है जो लापता मूल्यों के साथ डेटासेट पर काम कर सकते हैं। मैंने इस दृष्टिकोण पर कुछ प्रयास किए और (जैसा कि आप बताते हैं) अशक्त मॉडल का फेरबदल दृष्टिकोण वास्तव में महत्वपूर्ण पीसी की संख्या को कम करके आंकता है। हालांकि, आईरिस डेटासेट के लिए, मैं लगातार पुनर्निर्माण त्रुटि के लिए एक पीसी वापस करता हूं। दिलचस्प है कि आपने भूखंड के बारे में क्या उल्लेख किया है। यह हो सकता है कि यदि हम प्रजातियों की भविष्यवाणियों के आधार पर त्रुटि का अनुमान लगा रहे हों, तो परिणाम भिन्न हो सकते हैं।
बॉक्स

जिज्ञासा से बाहर, मैंने इसे आइरिस डेटा पर आज़माया। वास्तव में, मुझे क्रॉस-वेलिडेशन विधि के साथ दो महत्वपूर्ण पीसी मिलते हैं। मैंने अपनी लिंक की गई पोस्ट को अपडेट किया, कृपया वहां देखें।
अमीबा का कहना है कि मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.