एंड्रयू एनएवी एसवीडी का उपयोग करना पसंद करता है और पीसीए करने के लिए सहसंयोजक मैट्रिक्स का ईआईजी नहीं?


29

मैं एंड्रयू एनए के कसेरा कोर्स और अन्य सामग्रियों से पीसीए का अध्ययन कर रहा हूं। स्टैनफोर्ड एनएलपी कोर्स cs224n के पहले असाइनमेंट में , और एंड्रयू एनजी से लेक्चर वीडियो में , वे कोविरियन मैट्रिक्स के ईजेन्वेक्टर अपघटन के बजाय एकवचन मूल्य अपघटन करते हैं, और एनजी यहां तक ​​कहते हैं कि एसवीडी संख्यात्मक रूप से ईगेंडेकोम्पेनशन से अधिक स्थिर है।

मेरी समझ से, पीसीए के लिए हमें (m,n)आकार के डेटा मैट्रिक्स का SVD करना चाहिए , आकार के सहसंयोजक मैट्रिक्स का नहीं (n,n)। और कोविरियन मैट्रिक्स के आइजनवेक्टर अपघटन।

वे covariance मैट्रिक्स का SVD क्यों करते हैं, डेटा मैट्रिक्स नहीं?


8
वर्गाकार सममित धनात्मक अर्धचालक मैट्रिक्स (जैसे सहसंयोजक मैट्रिक्स) के लिए, आइगेनवैल्यू और एकवचन मूल्य विघटन बिल्कुल समान हैं।
अमीबा का कहना है कि मोनिका

5
मेरा मतलब है कि वे गणितीय रूप से समान हैं। संख्यात्मक रूप से वे वास्तव में विभिन्न एल्गोरिदम का उपयोग कर सकते हैं और एक दूसरे की तुलना में अधिक स्थिर हो सकता है (जैसा कि एनजी कहते हैं)। यह +1 के बारे में अधिक जानना दिलचस्प होगा।
अमीबा का कहना है कि मोनिका

4
के बारे में इस यहाँ कुछ जानकारी: de.mathworks.com/matlabcentral/newsreader/view_thread/21268 । लेकिन ध्यान दें कि एक एल्गोरिथ्म दूसरे की तुलना में अधिक स्थिर क्यों होगा, इसके बारे में कोई भी स्पष्टीकरण बहुत ही तकनीकी होने वाला है।
अमीबा का कहना है कि

2
मैटलैब में x=randn(10000); x=x'*x; tic; eig(x); toc; tic; svd(x); toc;() eig के लिए मेरी मशीन आउटपुट 12s और SVD के लिए 26s पर ()। यदि यह इतना धीमा है, तो इसे कम से कम अधिक स्थिर होना चाहिए! :-)
अमीबा का कहना है कि मोनिका

4
यही कारण है कि एक गलत समझ के आधार पर किया जा सकता है: डेटा मैट्रिक्स के SVD कर है का उपयोग कर से अधिक स्थिर eigया svdसहप्रसरण मैट्रिक्स पर है, लेकिन जहाँ तक मैं जानता हूँ कि वहाँ के रूप में उपयोग करते हुए दोनों के बीच कोई बड़ा अंतर है eigया svdसहप्रसरण मैट्रिक्स पर --- वे कर रहे हैं दोनों पिछड़े स्थिर एल्गोरिदम। अगर कुछ भी हो, तो मैं अपना पैसा ईजी पर अधिक स्थिर रखूंगा , क्योंकि यह कम संगणना करता है (यह मानते हुए कि दोनों को अत्याधुनिक एल्गोरिदम के साथ लागू किया गया है)।
फेडेरिको पोलोनी

जवाबों:


17

अमीबा ने टिप्पणियों में पहले से ही एक अच्छा जवाब दिया था, लेकिन अगर आप एक औपचारिक तर्क चाहते हैं, तो यह यहाँ जाता है।

एक मैट्रिक्स के एकमात्र मूल्य अपघटन है , जहां के स्तंभों के eigenvectors हैं और के विकर्ण प्रविष्टियों हैं वर्ग जड़ों अपनी eigenvalues की, यानी ।एक = यू Σ वी टी वी टीΣ σ मैं मैं = AA=UΣVTVATAΣσii=λi(ATA)

जैसा कि आप जानते हैं, प्राचार्य घटक अनुभवजन्य सहसंयोजक मैट्रिक्स के eigenvectors के स्थान पर आपके चर के orthogonal अनुमान हैं । घटकों के विचरण को इसके , ।λमैं(1)1n1ATAλi(1n1ATA)

किसी भी वर्ग मैट्रिक्स पर विचार करें , और एक वेक्टर ऐसी है कि । फिरअल्फा आर वी बी वी = λ vBαRvBv=λv

  1. Bkv=λkv
  2. λ(αB)=αλ(B)

हमें परिभाषित करें । की SVD के eigendecomposition गणना करेंगे उपज के लिएS=1n1ATAS T S = 1SSTS=1(n1)2ATAATA

  1. की eigenvectors है, जो संपत्ति 1 से के हैंटी(ATA)TATA=ATAATAATA
  2. वर्ग जड़ों की eigenvalues के है, जो संपत्ति 2, तो 1, तो 2 फिर से, कर रहे हैं ।1(n1)2ATAATA1(n1)2λi(ATAATA)=1(n1)2λi2(ATA)=1n1λi(ATA)=λi(1n1ATA)

देखा!

संख्यात्मक स्थिरता के बारे में, किसी को यह पता लगाने की आवश्यकता होगी कि नियोजित एलोग्रिथ क्या हैं। यदि आप इसके लिए तैयार हैं, तो मेरा मानना ​​है कि ये LAPACK रूटीन हैं जिनका उपयोग सुपी द्वारा किया गया है:

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

में

नाकत्सुका, युजी, और निकोलस जे। हिगम। "स्थिर और कुशल वर्णक्रमीय विभाजन और सममितीय प्रतिजन विघटन और एसवीडी के लिए एल्गोरिदम को जीतते हैं।" SIAM जर्नल ऑन साइंटिफिक कंप्यूटिंग 35.3 (2013): A1325-A1349।

वे विभिन्न eigenvalue एल्गोरिदम की स्थिरता की तुलना करते हैं, और ऐसा लगता है कि डिवाइड-एंड-कॉनरेक्ट दृष्टिकोण (वे एक प्रयोग में एक के रूप में एक ही उपयोग करते हैं!) क्यूआर एल्गोरिथ्म की तुलना में अधिक स्थिर है। यह, दावों के साथ-साथ कहीं और दावा करता है कि डी एंड सी विधियां वास्तव में अधिक स्थिर हैं, एनजी की पसंद का समर्थन करती हैं।


मैं covariance और svd पर माध्य केंद्रित डेटा पर svd से प्राप्त eigenvalues ​​समान नहीं हैं।
द जीडी

हालाँकि, स्कोर, जो कि X * V है (जहां V को [U, S, V] = svd (x) या svd (covx) से प्राप्त किया जाता है, समान हैं।
TheGD

1
@TheGD कोइवन (X) के Eigenvalues ​​और (X) के विलक्षण मान समान नहीं हैं, आँकड़े देखें ।stackexchange.com/questions/134282
अमीबा का कहना है कि मोनिका

SIAM पत्रिकाओं तक पहुंच की कमी के कारण निराशा की कोई आवश्यकता नहीं है: आपके द्वारा उद्धृत पेपर यहां है: Opt.mist.iu-tokyo.ac.jp/~nakatsukasa/publishedpdf/pub13.pdf
Dima Pasechnik

2
@broncoAbierto तकनीक। रिपोर्ट यहाँ है: cpsc.yale.edu/sites/default/files/files/tr932.pdf ( cpsc.ale.edu/research/technical-reports पर शीर्षक में टाइपो "Symetric" के कारण कोई भी इसे आसानी से नहीं पा सकता है / 1992-तकनीकी-रिपोर्ट्स :-))
दीमा पास्चनिक

12

@amoeba के पास PCA प्रश्नों के उत्कृष्ट उत्तर थे, इसमें SVD से PCA के संबंध में एक भी शामिल था । आपके सटीक प्रश्न का उत्तर देते हुए मैं तीन बिंदु बनाऊंगा:

  • गणितीय रूप से इस बात से कोई अंतर नहीं है कि आप पीसीए की गणना डेटा मैट्रिक्स पर सीधे करते हैं या उसके सहसंयोजक मैट्रिक्स पर
  • अंतर विशुद्ध रूप से संख्यात्मक परिशुद्धता और जटिलता के कारण है। एसवीडी को सीधे डेटा मैट्रिक्स पर लागू करना संवेदी मैट्रिक्स की तुलना में संख्यात्मक रूप से अधिक स्थिर है
  • SVD को covariance मैट्रिक्स पर लागू किया जा सकता है ताकि वह PCA कर सके या eigen मान प्राप्त कर सके, वास्तव में, यह स्वदेशी समस्याओं को हल करने का मेरा पसंदीदा तरीका है

यह पता चला है कि एसवीडी विशेष रूप से मशीन लर्निंग के लिए विशिष्ट ईजेनवल्यू डीकंपोजिशन प्रक्रियाओं की तुलना में अधिक स्थिर है। मशीन लर्निंग में अत्यधिक संपीड़ित रजिस्टरों के साथ समाप्त करना आसान है। एसवीडी इन मामलों में बेहतर काम करता है।

यहाँ बिंदु को प्रदर्शित करने के लिए पायथन कोड है। मैंने एक उच्च कोलीनियर डेटा मैट्रिक्स बनाया, इसका सहसंयोजक मैट्रिक्स प्राप्त किया और बाद के आइजेनवल को प्राप्त करने का प्रयास किया। एसवीडी अभी भी काम कर रहा है, जबकि साधारण ईजन अपघटन इस मामले में विफल रहता है।

import numpy as np
import math
from numpy import linalg as LA

np.random.seed(1)

# create the highly collinear series
T = 1000
X = np.random.rand(T,2)
eps = 1e-11
X[:,1] = X[:,0] + eps*X[:,1]

C = np.cov(np.transpose(X))
print('Cov: ',C)

U, s, V = LA.svd(C)
print('SVDs: ',s)

w, v = LA.eig(C)
print('eigen vals: ',w)

आउटपुट:

Cov:  [[ 0.08311516  0.08311516]
 [ 0.08311516  0.08311516]]
SVDs:  [  1.66230312e-01   5.66687522e-18]
eigen vals:  [ 0.          0.16623031]

अद्यतन करें

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

import numpy as np
import math
from scipy.linalg import toeplitz
from numpy import linalg as LA

np.random.seed(1)

# create the highly collinear series
T = 100
p = 2
eps = 1e-8

m = 1000 # simulations
err = np.ones((m,2)) # accuracy of small eig value
for j in range(m):
    u = np.random.rand(T,p)
    X = np.ones(u.shape)
    X[:,0] = u[:,0]
    for i in range(1,p):
        X[:,i] = eps*u[:,i]+u[:,0]

    C = np.cov(np.transpose(X))

    U, s, V = LA.svd(C)

    w, v = LA.eig(C)

    # true eigen values
    te = eps**2/2 * np.var(u[:,1])*(1-np.corrcoef(u,rowvar=False)[0,1]**2)
    err[j,0] = s[p-1] - te
    err[j,1] = np.amin(w) - te


print('Cov: ',C)
print('SVDs: ',s)
print('eigen vals: ',w)
print('true small eigenvals: ',te)

acc = np.mean(np.abs(err),axis=0)    
print("small eigenval, accuracy SVD, Eig: ",acc[0]/te,acc[1]/te)

आउटपुट:

Cov:  [[ 0.09189421  0.09189421]
 [ 0.09189421  0.09189421]]
SVDs:  [ 0.18378843  0.        ]
eigen vals:  [  1.38777878e-17   1.83788428e-01]
true small eigenvals:  4.02633695086e-18
small eigenval, accuracy SVD, Eig:  2.43114702041 3.31970128319

यहां कोड काम करता है। का परीक्षण करने के लिए यादृच्छिक कोवरियन मैट्रिक्स उत्पन्न करने के बजाय, मैं दो वेरिएबल्स के साथ यादृच्छिक डेटा मैट्रिक्स उत्पन्न कर रहा हूं: जहां - स्वतंत्र वर्दी यादृच्छिक चर। तो, सहसंयोजक मैट्रिक्स जहाँ - गणवेश का एकरूपता और सहसंबंध गुणांक। उन्हें।यू , वी ( σ 2 1 σ 2 1 + ε ρ σ 1 σ 2 σ 2 1 + ε ρ σ 1 σ 2 σ 2 1 + 2 ε ρ σ 1 σ 2 + ε 2 σ 2 2 σ 2 ) σ 2 1 , σ 2 2

x1=ux2=u+εv
u,v
(σ12σ12+ερσ1σ2σ12+ερσ1σ2σ12+2ερσ1σ2+ε2σ22σ2)
σ12,σ22,ρ

इसका सबसे छोटा स्वदेशी: छोटे ईजेंवल्यू को केवल सीमित परिशुद्धता के कारण सूत्र में को प्लग करके गणना नहीं की जा सकती है , इसलिए आपको टेलर को इसका विस्तार करने की आवश्यकता है: ελσ 2 2

λ=12(σ22ε2σ24ε4+4σ23ρσ1ε3+8σ22ρ2σ12ε2+8σ2ρσ13ε+4σ14+2σ2ρσ1ε+2σ12)
ε
λσ22ε2(1ρ2)/2

मैं चला रहा हूँ डेटा मैट्रिक्स की वास्तविकताओं के सिमुलेशन, सिम्युलेटेड मैट्रिक्स , और त्रुटियों को प्राप्त करता है ।λ जे जे = λ - λ jj=1,,mλ^jej=λλ^j


4
हां, लेकिन यहां ओपी एसवीडी बनाम ईआईजी के बारे में पूछ रहा है जो दोनों कोविरियन मैट्रिक्स पर लागू होता है।
अमीबा का कहना है कि मोनिका

1
@amoeba, मैं SVD और पीसीए के संबंध स्पष्ट किया
Aksakal

यह एक अच्छा जवाब है। काश, हालांकि, यह उल्लेख करना कि svd नकारात्मक eigenvalues ​​का पता नहीं लगा सकते हैं, जब कोई भी हो और आप उन्हें देखना चाहते हैं (यदि सहसंयोजक मैट्रिक्स मूल नहीं है, लेकिन कहते हैं, किसी भी तरह से स्मूथ या अनुमान लगाया गया है या युग्मन विलोपन से बाहर आता है) लापता मूल्यों का)। इसके अलावा, कोव मैट्रिक्स पर ईग उस पर svd की तुलना में थोड़ा तेज रहता है।
22

@ttnphns, नॉन पॉजिटिव निश्चित मैट्रिक्स एक मुद्दा है, निश्चित रूप से
अक्सकल

1
@FedericoPoloni, एफपी अंकगणित और सटीक उत्तर नहीं जानने पर मैं असहमत हूं। इस मामले में मुझे इस कार्य के लिए पर्याप्त सटीकता के साथ उत्तर पता है। 2x2 पर आपके पास एक उचित बिंदु है। मेरी कुछ सोच रहेगी।
Aksakal

6

पायथन उपयोगकर्ताओं के लिए, मैं कहना चाहूंगा कि सममित मैट्रिक्स (कोवरियन मैट्रिक्स की तरह) के लिए, numpy.linalg.eighसामान्य numpy.linalg.eigफ़ंक्शन के बजाय फ़ंक्शन का उपयोग करना बेहतर है ।

eigheigमेरे कंप्यूटर (मैट्रिक्स आकार की परवाह किए बिना) की तुलना में 9-10 गुना अधिक तेज है और इसमें बेहतर सटीकता (@ अक्षल की सटीकता परीक्षण के आधार पर) है।

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

एक समान तर्क संख्यात्मक स्थिरता के बारे में बनाया जा सकता है। अगर मुझे पीसीए के लिए सहसंयोजक मैट्रिक्स विधि का उपयोग करना है, तो मैं eighइसके बजाय इसे विघटित कर दूंगा svd। यदि यह विफल हो जाता है (जिसे अभी तक यहां प्रदर्शित नहीं किया गया है), तो यह संभवतः उस समस्या पर पुनर्विचार करने के लायक है जिसे आप बेहतर एल्गोरिदम की तलाश शुरू करने से पहले हल करने की कोशिश कर रहे हैं।


+1। कुछ जानकारी eighबनाम eig: mail.scipy.org/pipermail/numpy-discussion/2006-March/…
मोनिका

2

आपके प्रश्न के अंतिम भाग का उत्तर देने के लिए, "वे डेटा मैट्रिक्स नहीं, बल्कि सहसंयोजक मैट्रिक्स का SVD क्यों करते हैं?" मेरा मानना ​​है कि यह प्रदर्शन और भंडारण कारणों के लिए है। आमतौर पर, एक बहुत बड़ी संख्या होगी और बड़ी होने पर भी, हम अपेक्षा करेंगे ।n m nmnmn

सहसंयोजक मैट्रिक्स की गणना करना और फिर उस पर SVD का प्रदर्शन करना, इन परिस्थितियों में पूर्ण डेटा मैट्रिक्स पर SVD की गणना करने की तुलना में बहुत जल्दी होता है, उसी परिणाम के लिए।

यहां तक ​​कि काफी छोटे मूल्यों के लिए प्रदर्शन लाभ हजारों (मिलीसेकंड बनाम सेकंड) के कारक हैं। मैंने अपनी मशीन पर कुछ परीक्षण चलाकर मतलाब का उपयोग करने की तुलना की: यहाँ छवि विवरण दर्ज करें

यह सिर्फ सीपीयू का समय है, लेकिन स्टोरेज की जरूरत सिर्फ इतनी ही है, अगर ज्यादा महत्वपूर्ण नहीं है। यदि आप Matlab में एक हजार मैट्रिक्स द्वारा एक लाख पर SVD का प्रयास करते हैं, तो यह डिफ़ॉल्ट रूप से त्रुटि करेगा, क्योंकि इसे 7.4xB की कार्यशील आकार की आवश्यकता है।


यह सवाल cov मैट्रिक्स बनाम SVD की ईआईजी के बारे में है जो उत्तर नहीं मिलता है सहप्रसरण मैट्रिक्स की
अमीबा का कहना है कि मोनिका

1
अंत में उनका सवाल, बोल्ड में बताया गया है, "वे डेटा मैट्रिक्स नहीं, बल्कि कोविरियस मैट्रिक्स के एसवीडी क्यों करते हैं?" जिसका मैंने उत्तर दिया।
ग्रूफ़

मैं यह स्पष्ट करने के लिए उद्घाटन वाक्य को संपादित करूँगा कि मैं ओपी के प्रश्न के उस भाग का उत्तर दे रहा था। मैं देखता हूं कि यह कैसे भ्रमित हो सकता है। धन्यवाद।
ग्रूफ़

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