एसवीडी और पीसीए के बीच संबंध। PCA करने के लिए SVD का उपयोग कैसे करें?


351

प्रिंसिपल कंपोनेंट एनालिसिस (पीसीए) को आमतौर पर कोवरियन मैट्रिक्स के एक ईजन-अपघटन के माध्यम से समझाया जाता है। हालाँकि, यह डेटा मैट्रिक्स एकवचन मान अपघटन (SVD) के माध्यम से भी किया जा सकता है । यह कैसे काम करता है? इन दोनों दृष्टिकोणों के बीच क्या संबंध है? एसवीडी और पीसीए के बीच क्या संबंध है?X

या दूसरे शब्दों में, आयामीता में कमी करने के लिए डेटा मैट्रिक्स के एसवीडी का उपयोग कैसे करें?


8
मैंने अपने स्वयं के उत्तर के साथ इस FAQ-शैली के प्रश्न को एक साथ लिखा था, क्योंकि यह अक्सर विभिन्न रूपों में पूछा जाता है, लेकिन कोई विहित धागा नहीं है और इसलिए डुप्लिकेट को बंद करना मुश्किल है। कृपया इसके साथ मेटा थ्रेड में मेटा टिप्पणी प्रदान करें ।
अमीबा


2
इसके आगे के लिंक के साथ एक उत्कृष्ट और विस्तृत अमीबा के जवाब के अलावा, मैं यह जांचने की सिफारिश कर सकता हूं , जहां पीसीए को कुछ अन्य एसवीडी-आधारित तकनीकों के साथ-साथ माना जाता है। चर्चा बीजगणित लगभग सिर्फ मामूली अंतर के साथ अमीबा के के समान वहाँ प्रस्तुत करता है कि वहाँ भाषण, पीसीए का वर्णन करने में, के SVD अपघटन के बारे में चला जाता है [या ] इसके बजाय - जो बस सुविधाजनक है क्योंकि यह covariance मैट्रिक्स के इगेंडेकोम्पोजिशन के माध्यम से किए गए PCA से संबंधित है। एक्स/X/n एक्सX/n1X
tnnphns

पीसीए एसवीडी का एक विशेष मामला है। पीसीए को डेटा को सामान्यीकृत करने की आवश्यकता है, आदर्श रूप से एक ही इकाई। पीसीए में मैट्रिक्स nxn है।
ओरवार कोरवार

@OrvarKorvar: क्या nxn मैट्रिक्स के बारे में बात कर रहे हैं?
Cbhihe

जवाबों:


412

चलो डेटा मैट्रिक्स का हो आकार, जहां नमूने और की संख्या है चर की संख्या है। आइए हम मान लें कि यह केन्द्रित है , अर्थात स्तंभ के साधन घटाए गए हैं और अब शून्य के बराबर हैं। एन × पी एन पीXn×pnp

फिर सहप्रसरण मैट्रिक्स द्वारा दिया जाता है । यह एक सममित मैट्रिक्स है और इसलिए यह diagonalized जा सकता है: जहां eigenvectors के एक मैट्रिक्स (प्रत्येक स्तंभ एक आइजन्वेक्टर है) और है है विकर्ण पर घटते क्रम में eigenvalues साथ एक विकर्ण मैट्रिक्स । Eigenvectors को डेटा की प्रिंसिपल एक्सिस या प्रिंसिपल दिशाएं कहा जाता है । प्रमुख अक्षों पर डेटा के अनुमानों को प्रमुख घटक कहा जाता है , जिसे पीसी स्कोर भी कहा जाता हैसी सी = एक्सएक्स / ( n - 1 ) सी = वी एल वी , वी एल λ मैं जे जे एक्स वी मैं मैं एक्स वीp×pCC=XX/(n1)

C=VLV,
VLλi; इन्हें नए, रूपांतरित, चरों के रूप में देखा जा सकता है। मई के प्रमुख घटक द्वारा दिया जाता है के मई के स्तंभ । नए पीसी स्थान में -th डेटा बिंदु के निर्देशांक -th पंक्ति के द्वारा दिए गए हैं ।jjXViiXV

यदि हम अब का एकवचन मान विघटित करते हैं , तो हम एक अपघटन जहां एक एकात्मक मैट्रिक्स है और विकर्ण मैट्रिक्स है एकवचन मान । यहाँ से कोई भी आसानी से उस जिसका अर्थ है कि सही एकवचन वैक्टर प्रमुख दिशा-निर्देश हैं और यह एकवचन मान covariance मैट्रिक्स के eigenvalues ​​से संबंधित हैं जो । प्रमुख घटक द्वारा दिए गए हैंएक्स = यू एस वी , यू एस एस मैं सी = वी एस यूयू एस वी/ ( n - 1 ) = वी एस 2X

X=USV,
USsiवीλमैं=रों 2 मैं /(n-1)एक्सवी=यूएसवीवी=यूएस
C=VSUUSV/(n1)=VS2n1V,
Vλi=si2/(n1)XV=USVV=US

संक्षेप में:

  1. यदि , तो कॉलम प्रमुख दिशाएं / अक्ष हैं।X=USVV
  2. कॉलम प्रमुख घटक ("स्कोर") हैं।US
  3. एकवचन मान covariance मैट्रिक्स के eigenvalues ​​से संबंधित हैं । Eigenvalues संबंधित पीसी के दिखाते हैं।λi=si2/(n1)λi
  4. मानकीकृत स्कोर कॉलम द्वारा दिए गए हैं और लोडिंग कॉलम द्वारा दिए गए हैं । उदाहरण के लिए यहां और यहां देखें कि "लोडिंग" को मुख्य निर्देशों के साथ भ्रमित क्यों नहीं किया जाना चाहिए।n1UVS/n1
  5. उपरोक्त केवल तभी सही है जब केंद्रित हो। Xइसके बाद ही कोविर्सियस मैट्रिक्स, बराबर होता है ।XX/(n1)
  6. ऊपर केवल स्तंभों और पंक्तियों और चर में नमूने वाले लिए सही है । यदि चर स्तंभों में पंक्तियों और नमूनों में हैं, तो और विनिमय व्याख्याएं हैं।XUV
  7. यदि कोई एक सहसंबंध मैट्रिक्स (एक सहसंयोजक मैट्रिक्स के बजाय) पर पीसीए प्रदर्शन करना चाहता है, तो कॉलम न केवल केंद्रित होना चाहिए, बल्कि मानकीकृत भी होना चाहिए, अर्थात उनके मानक विचलन द्वारा विभाजित किया जाना चाहिए।X
  8. से डेटा के आयामी स्वरूप को कम करने के के लिए , चयन के पहले कॉलम , और के ऊपरी-बाएं भाग । उनका उत्पाद पहले पीसी वाले आवश्यक मैट्रिक्स है।pk<pkUk×kSUkSkn×kk
  9. इसके अलावा, पहले PC को संबंधित प्रिंसिपल yields मैट्रिक्स द्वारा किया जाता है जिसमें मूल आकार लेकिन निम्न श्रेणी (रैंक ) का है। यह मैट्रिक्स पहले PC से मूल डेटा का पुनर्निर्माण प्रदान करता है । इसमें सबसे कम संभव पुनर्निर्माण त्रुटि है, मेरा जवाब यहां देखेंkVkXk=UkSkVkn×pkXkk
  10. कड़ाई से बोलना, , आकार का है और , आकार का है। हालाँकि, अगर तो के अंतिम कॉलम मनमाने हैं (और की संगत पंक्तियाँ लगातार शून्य हैं); इसलिए अर्थव्यवस्था के आकार (या पतले ) SVD का उपयोग करना चाहिए जो बेकार के कॉलमों को छोड़ते हुए, आकार का देता है । बड़े लिए मैट्रिक्स अन्यथा अनावश्यक रूप से विशाल होगा। की विपरीत स्थिति के लिए भी यही बात लागू होती हैUn×nVp×pn>pnpUSUn×pnpUnp

आगे के लिंक

घूर्णन पीसीए एनीमेशन


5
@Antoine, सहसंयोजक मैट्रिक्स , जहां कोण कोष्ठक औसत मान को दर्शाते हैं, के । । यदि सभी को एक मैट्रिक्स में पंक्तियों के रूप में स्टैक्ड किया जाता है , तो यह अभिव्यक्ति बराबर है । यदि केंद्रित है तो यह को सरल करता है । विचरण के बारे में सोचो; यह के बराबर है । लेकिन अगर (यानी डेटा केंद्रित हैं), तो यह बस का औसत मूल्य है ।(xix¯)(xix¯)xiX(XX¯)(XX¯)/(n1)XXX/(n1)(xix¯)2x¯=0xi2
अमीबा

2
एसवीडी द्वारा पीसीए के लिए एक कोड नमूना: stackoverflow.com/questions/3181593/…
आशावादी

1
अमीबा, मैंने आपके प्रदान किए गए लिंक के अनुरूप एक और लिंक जोड़ने की जिम्मेदारी ली। आशा है कि आपको यह उचित लगेगा।
1

2
@amoeba हाँ, लेकिन इसका उपयोग क्यों करें? इसके अलावा, क्या लिए एक ही भाजक का उपयोग करना संभव है ? समस्या यह है कि मैं ऐसे फ़ार्मुलों को देखता हूँ जहाँ और समझने की कोशिश करते हैं, उनका उपयोग कैसे करें? Sλi=si2
डिम्स

1
@sera बस अपने मैट्रिक्स को स्थानांतरित करें और अपनी समस्या से छुटकारा पाएं। आप केवल अन्यथा भ्रमित हो रहे होंगे।
अमीबा

22

मैंने @ अमीबा के उत्तर के साथ एक पायथन और नेम्पी स्निपेट लिखा है और अगर किसी के लिए यह उपयोगी है तो मैं इसे यहाँ छोड़ देता हूँ। टिप्पणियाँ ज्यादातर @ अमीबा के जवाब से ली गई हैं।

import numpy as np
from numpy import linalg as la
np.random.seed(42)


def flip_signs(A, B):
    """
    utility function for resolving the sign ambiguity in SVD
    http://stats.stackexchange.com/q/34396/115202
    """
    signs = np.sign(A) * np.sign(B)
    return A, B * signs


# Let the data matrix X be of n x p size,
# where n is the number of samples and p is the number of variables
n, p = 5, 3
X = np.random.rand(n, p)
# Let us assume that it is centered
X -= np.mean(X, axis=0)

# the p x p covariance matrix
C = np.cov(X, rowvar=False)
print "C = \n", C
# C is a symmetric matrix and so it can be diagonalized:
l, principal_axes = la.eig(C)
# sort results wrt. eigenvalues
idx = l.argsort()[::-1]
l, principal_axes = l[idx], principal_axes[:, idx]
# the eigenvalues in decreasing order
print "l = \n", l
# a matrix of eigenvectors (each column is an eigenvector)
print "V = \n", principal_axes
# projections of X on the principal axes are called principal components
principal_components = X.dot(principal_axes)
print "Y = \n", principal_components

# we now perform singular value decomposition of X
# "economy size" (or "thin") SVD
U, s, Vt = la.svd(X, full_matrices=False)
V = Vt.T
S = np.diag(s)

# 1) then columns of V are principal directions/axes.
assert np.allclose(*flip_signs(V, principal_axes))

# 2) columns of US are principal components
assert np.allclose(*flip_signs(U.dot(S), principal_components))

# 3) singular values are related to the eigenvalues of covariance matrix
assert np.allclose((s ** 2) / (n - 1), l)

# 8) dimensionality reduction
k = 2
PC_k = principal_components[:, 0:k]
US_k = U[:, 0:k].dot(S[0:k, 0:k])
assert np.allclose(*flip_signs(PC_k, US_k))

# 10) we used "economy size" (or "thin") SVD
assert U.shape == (n, p)
assert S.shape == (p, p)
assert V.shape == (p, p)

21

मुझे पीसीए के साथ शुरू करते हैं। मान लीजिए कि आपके पास n डेटा बिंदु हैं, जिसमें प्रत्येक संख्या d संख्या (या आयाम) शामिल है। यदि आप इस डेटा को केंद्र में रखते हैं ( प्रत्येक डेटा वेक्टर से माध्य डेटा बिंदु को घटाएं ) तो आप मैट्रिक्स बनाने के लिए डेटा को स्टैक कर सकते हैंμxi

X=(x1TμTx2TμTxnTμT).

सहसंयोजक मैट्रिक्स

S=1n1i=1n(xiμ)(xiμ)T=1n1XTX

अलग-अलग निर्देशांक जिसमें आपके डेटा को दिया जाता है, को अलग-अलग करने के उपाय। तो, यह शायद आश्चर्य की बात नहीं है कि पीसीए - जो आपके डेटा की भिन्नता को पकड़ने के लिए डिज़ाइन किया गया है - कोविरियन मैट्रिक्स के संदर्भ में दिया जा सकता है। विशेष रूप से, का स्वदेशी अपघटन होता हैS

S=VΛVT=i=1rλiviviT,

जहां है मई के प्रधानाचार्य घटक , या पीसी, और है वें के eigenvalue और भी साथ डेटा की विचरण के बराबर है मई के पीसी। यह अपघटन रैखिक बीजगणित में एक सामान्य प्रमेय से आता है, और पीसीए से रिलेटिनो को प्रेरित करने के लिए कुछ काम करना पड़ता है।viiλiiSi

एक बेतरतीब ढंग से उत्पन्न गाऊसी डेटासेट का पीसीए

SVD अपने कॉलम-स्पेस और रो-स्पेस के संदर्भ में मैट्रिक्स को समझने का एक सामान्य तरीका है। (यह पंक्ति और स्तंभ स्थान के सहज संबंध के साथ अन्य मैट्रिक्स के संदर्भ में किसी भी मैट्रिक्स को फिर से लिखने का एक तरीका है। उदाहरण के लिए, मैट्रिक्स के लिए हम दिशानिर्देश पा सकते हैं और डोमेन और रेंज ताकि मेंA=(1201)uivi

2x2 उदाहरण के लिए SVD

आप पर विचार कैसे द्वारा इन पा सकते हैं एक रेखीय परिवर्तन के रूप में एक इकाई क्षेत्र morphs अंडाकार के प्रमुख अर्द्ध कुल्हाड़ियों से तालमेल: एक अंडाकार करने के लिए अपने डोमेन में और उनके preimages हैं।ASuivi

किसी भी मामले में, ऊपर डेटा मैट्रिक्स (वास्तव में, बस सेट करें ), एसवीडी हमें लिखने देता हैXA=X

X=i=1rσiuivjT,

जहां और की eigenvalue अपघटन के साथ vectors.A तुलना की orthonormal सेट हैं पता चलता है कि "सही विलक्षण वैक्टर" पीसी के बराबर हैं, "सही विलक्षण वैक्टर" कर रहे हैं{ v i } S v i{ui}{vi}Svi

ui=1(n1)λiXvi,

और "एकवचन मान" माध्यम से डेटा मैट्रिक्स से संबंधित हैंσi

σi2=(n1)λi.

यह एक सामान्य तथ्य है कि सही वैक्टर के कॉलम स्पेस को । इस विशिष्ट मामले में, हमें -th प्रिंसिपल कंपोनेंट की दिशा में डेटा का स्केल्ड प्रोजेक्शन देता है । बाईं ओर का एकवचन वैक्टर सामान्य रूप से की पंक्ति स्थान पर होता है, जो हमें ऑर्थोनॉमिक वैक्टर का एक सेट देता है जो डेटा को पीसी की तरह फैलाता है। एक्स यू मैं एक्स मैं v मैं एक्सuiXuiXiviX

मैं इस लंबे लेख में पीसीए और एसवीडी के बीच संबंधों के कुछ और विवरणों और लाभों पर जाता हूं ।


आपके aser आंद्रे के लिए धन्यवाद। बस दो छोटे टाइपो सुधार: 1. अंतिम पैराग्राफ में आप बाएं और दाएं भ्रमित कर रहे हैं। 2. एक्स के लिए (पूंजी) सूत्र में, आप v_i के बजाय v_j का उपयोग कर रहे हैं।
Alon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.