क्या PCA के घटक वास्तव में विचरण के प्रतिशत का प्रतिनिधित्व करते हैं? क्या वे 100% से अधिक का योग कर सकते हैं?


13

ओ 'रेली की "मशीन लर्निंग फॉर हैकर्स" का कहना है कि प्रत्येक प्रमुख घटक विचरण के प्रतिशत का प्रतिनिधित्व करता है। मैंने नीचे पृष्ठ का प्रासंगिक भाग उद्धृत किया है (अध्याय 8, पृष्ठ 207)। एक अन्य विशेषज्ञ से बात करते हुए, उन्होंने माना कि यह प्रतिशत है।

हालांकि 24 घटक 133.2095% तक है। ऐसे कैसे हो सकता है?

अपने आप को आश्वस्त करने के बाद कि हम पीसीए का उपयोग कर सकते हैं, हम आर में कैसे करते हैं? फिर, यह एक ऐसी जगह है जहां R चमकता है: PCA की संपूर्णता कोड की एक पंक्ति में की जा सकती है। हम पीसीए को चलाने के लिए प्रिंसिपल फ़ंक्शन का उपयोग करते हैं:

pca <- princomp(date.stock.matrix[,2:ncol(date.stock.matrix)])

यदि हम R में केवल pca टाइप करते हैं, तो हम मुख्य घटकों का एक त्वरित सारांश देखेंगे:

Call:
princomp(x = date.stock.matrix[, 2:ncol(date.stock.matrix)])
Standard deviations:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7
29.1001249 20.4403404 12.6726924 11.4636450 8.4963820 8.1969345 5.5438308
Comp.8 Comp.9 Comp.10 Comp.11 Comp.12 Comp.13 Comp.14
5.1300931 4.7786752 4.2575099 3.3050931 2.6197715 2.4986181 2.1746125
Comp.15 Comp.16 Comp.17 Comp.18 Comp.19 Comp.20 Comp.21
1.9469475 1.8706240 1.6984043 1.6344116 1.2327471 1.1280913 0.9877634
Comp.22 Comp.23 Comp.24
0.8583681 0.7390626 0.4347983
24 variables and 2366 observations.

इस सारांश में, मानक विचलन हमें बताते हैं कि विभिन्न मुख्य घटकों द्वारा डेटा सेट में कितने प्रकार का परिवर्तन होता है। पहला घटक, जिसे Comp.1 कहा जाता है, 29% विचरण का खाता है, जबकि दूसरा घटक 20% है। अंत तक, अंतिम घटक, Comp.24, विचरण के 1% से कम के लिए जिम्मेदार है। इससे पता चलता है कि हम अपने डेटा के बारे में बहुत कुछ सीख सकते हैं।

[कोड और डेटा गितुब पर पाया जा सकता है ।]


6
मुझे लगता है कि लेखक की व्याख्या Standard deviationsथोड़ी दूर है। चूंकि मानक विचलन वास्तव में मानक विचलन हैं, इसलिए हमें उन्हें यह देखने के लिए वर्गाकार करना चाहिए कि प्रत्येक घटक कितना भिन्नता का प्रतिनिधित्व करता है। पहला घटक कुल विचरण के प्रतिशत का प्रतिनिधित्व करेगा । 100×29.1001249229.10012492++0.43479832
१२:१२ पर असामान्य

4
यह प्रश्न दो बुनियादी गलतियों से उठता है, मुझे डर लगता है: (1) यह शीर्षक की घोषणा करने से चूक जाता है कि संख्या "मानक विचलन" हैं और गलतियों के लिए उन्हें भिन्नता है और (2) यह मानता है कि वे संख्याएं लंबवत हैं, लेकिन वे नहीं हैं। (उनकी इकाइयाँ जो कुछ भी स्टॉक में नापी जाती हैं: डॉलर या प्रतिशत प्रति वर्ष या जो भी हो।) यहाँ कोई बग नहीं है: @Max की टिप्पणी बताती है कि कुल विचरण का प्रतिशत कैसे पाया जाए।
whuber

1
@whuber शायद मुझे "बग" के बजाय "टाइपो" का उपयोग करना चाहिए था? :-) " Comp.1, 29% संस्करण के लिए खाता " गलत है और इसे पढ़ना चाहिए " Comp.1, खातों के 46% भाग के लिए "
डैरेन कुक

1
धन्यवाद, डैरेन: मैंने गलत समझा कि भ्रम पुस्तक में मौजूद था और मैंने Rसॉफ्टवेयर को संदर्भित करने के लिए "बग" लिया । उस त्रुटि को पकड़ना एक अच्छी पकड़ थी (मुझे आशा है कि आपको यह पता लगाना फायदेमंद होगा कि पीसीए के साथ वास्तव में क्या हो रहा है)!
whuber

5
हां, यह निर्विवाद रूप से पुस्तक का एक बग है। ऐसी कुछ जगहें हैं, जहाँ मैंने भिन्नताओं के बजाय मानक विचलन का दुरुपयोग किया है। (उदाहरण के लिए, एक ऐसा बिंदु है जिसमें हम R-squared की गणना करने के लिए MSE के बजाय RMSE का उपयोग करते हैं।) मुझे उम्मीद है कि हमारे पास निकट भविष्य में इन प्रकार के बग्स को ठीक करने और बैठने का समय होगा।
जॉन मायल्स व्हाइट

जवाबों:


11

summary.princomp"प्रॉविज़न ऑफ़ प्रॉविंस" और "कम्यूनिकेशन प्रॉपरेशन" देखने के लिए उपयोग करें ।

pca <- princomp(date.stock.matrix[,2:ncol(date.stock.matrix)])
summary(pca)

1
धन्यवाद जोशुआ। तो पहला घटक वास्तव में विचरण का 46% है। मैं किताब को एक बग रिपोर्ट भेजूंगा।
डैरेन कुक

"प्रसार के अनुपात" की गणना कैसे की जाती है? दिखाया गया संख्या 0.4600083 है। लेकिन sqrt(pca$sdev[1]/sum(pca$sdev))(मोटे तौर पर sqrt(29.1/133.2)) 0.4673904 देता है।
डैरेन कुक

3
@DarrenCook: sdevतात्पर्य है कि आप मानक विचलन को देख रहे हैं , अर्थात विचरण (या , मेरे उत्तर से संकेतन का उपयोग करके), जो अंतर स्पष्ट करना चाहिए। इसके बजाय कोशिश करें । λipca$sdev[1]^2/sum(pca$sdev^2)
13:24 पर MånsT

2
@DarrenCook: स्रोत का उपयोग करें ... stats:::print.summary.princompआपको दिखाता है कि यह sdevघटक को स्क्वर करता है, जो stats:::princomp.defaultदिखाता है sqrtकि आइजन मूल्यों का है।
जोशुआ उलरिच

11

उन्हें योग करना चाहिए100 %.

एक की कुल विचरण -variate यादृच्छिक चर के साथ सहप्रसरण मैट्रिक्स के रूप में परिभाषित किया गया हैpXΣ

tr(Σ)=σ11+σ22++σpp.

अब, एक सममित मैट्रिक्स का निशान इसके eigenvaluesइस प्रकार कुल विचरण अगर हम का उपयोग करते हुए को दर्शाते हैं । ध्यान दें कि covariance मैट्रिस पॉजिटिव-सेमीडिफाइन होने के बाद से हैं , ताकि कुल विचरण गैर-नकारात्मक हो।λ1λ2λp.

tr(Σ)=λ1++λp
λiΣλp0

लेकिन प्रमुख घटकों द्वारा दिया जाता है , जहां है : वें आइजन्वेक्टर (लंबाई के लिए मानकीकृत ), eigenvalue के लिए इसी । इसका विचरण और इसलिए पहले प्रमुख घटक कुल विचरण का । विशेष रूप से, वे होने पर कुल विचरण का बनाते हैं ।मैं मैं 1 λ मैं वी एक आर ( मैं एक्स ) = ' मैं Σ मैं = λ मैं ' मैंमैं =eiXeii1λi कश्मीर ( λ 1 + + λ k

Var(eiX)=eiΣei=λieiei=λi
k100%कश्मीर=पी
(λ1++λkλ1++λp100) %
100 %k=p

1
क्या आपने (अधिक हाल ही में) @Max द्वारा प्रश्न देखा है? उन्होंने जवाब दिया।
whuber

@whuber: मैंने इसे देखा नहीं था, इसलिए धन्यवाद। मैंने जोशुआ के उत्तर में एक टिप्पणी के समान टिप्पणी की।
16

4

यहां पिछले उत्तरों को पूरक करने के लिए कुछ आर कोड है ( pca[["sdev"]]आमतौर पर लिखा जाता है pca$sdev, लेकिन यह नीचे स्निपेट में गलत सूचना देता है)।

# Generate a dummy dataset.
set.seed(123)
x <- matrix(rnorm(400, sd=3), ncol=4)
# Note that princomp performs an unscaled PCA.
pca1 <- princomp(x)
# Show the fraction variance of each PC.
pca1[["sdev"]]^2
cumsum(pca1[["sdev"]]^2)/sum(pca1[["sdev"]]^2)
# Perform a scaled PCA.
pca2 <- princomp(x, cor=TRUE)
pca2[["sdev"]]^2
cumsum(pca2[["sdev"]]^2)/sum(pca2[["sdev"]]^2)

इसलिए, जैसा कि @Max बताता है, मानक विचलन के बजाय विचरण के साथ काम करना और कुल विचरण द्वारा विभाजित करने की भूल करना समस्या को हल करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.