पीसीए सहसंयोजक मैट्रिक्स ("प्रमुख कुल्हाड़ियों") के eigenvectors की गणना करता है और उन्हें उनके eigenvalues (व्याख्या किए गए विचरण की मात्रा) द्वारा सॉर्ट करता है। तब केंद्रित डेटा को प्रिंसिपल घटकों ("स्कोर") प्राप्त करने के लिए इन प्रमुख अक्षों पर अनुमानित किया जा सकता है। आयामीता में कमी के प्रयोजनों के लिए, कोई केवल प्रमुख घटकों का एक सबसेट रख सकता है और बाकी को त्याग सकता है। ( पीसीए के लिए एक आम आदमी के परिचय के लिए यहां देखें ।)
चलो होना के साथ डेटा मैट्रिक्स पंक्तियाँ (डेटा बिंदु) और कॉलम (चर, या सुविधाओं)। प्रत्येक पंक्ति से माध्य वेक्टर को घटाने के बाद , हमें केंद्रित डेटा मैट्रिक्स । Let कुछ eigenvectors का मैट्रिक्स है जिसे हम उपयोग करना चाहते हैं; ये अक्सर सबसे बड़े eigenvalues के साथ eigenvectors होंगे। तब PCA अनुमानों ("स्कोर") का मैट्रिक्स केवल द्वारा दिया जाएगा । एन×पीएनपीXrawn×pnpμXVp×kkkn×kZ=XV
यह नीचे दिए गए आंकड़े पर चित्रित किया गया है: पहला उपप्लॉट कुछ केंद्रीकृत डेटा (वही डेटा जो मैं लिंक किए गए धागे में अपने एनिमेशन में उपयोग करता हूं ) और इसके अनुमानों को पहले प्रमुख अक्ष पर दिखाता हूं । दूसरा सबप्लॉट केवल इस प्रक्षेपण के मूल्यों को दर्शाता है; आयाम को दो से घटाकर एक कर दिया गया है:
आदेश में इस एक प्रमुख घटक से मूल दो चर को फिर से संगठित करने में सक्षम होने के लिए, हम इसे वापस करने के लिए मैप कर सकते हैं के साथ आयाम । वास्तव में, प्रत्येक पीसी के मूल्यों को उसी वेक्टर पर रखा जाना चाहिए जो प्रक्षेपण के लिए उपयोग किया गया था; सबप्लोट्स 1 और 3 की तुलना करें। परिणाम तब । मैं इसे ऊपर के तीसरे सबप्लॉट पर प्रदर्शित कर रहा हूं। अंतिम पुनर्निर्माण , हमें उस सदिश को जोड़ने की आवश्यकता है:pV⊤X^=ZV⊤=XVV⊤X^rawμ
PCA reconstruction=PC scores⋅Eigenvectors⊤+Mean
ध्यान दें कि एक सीधे पहले सबप्लॉट से तीसरे में जा सकता है , मैट्रिक्स के साथ को गुणा करके ; इसे प्रक्षेपण मैट्रिक्स कहा जाता है । यदि सभी eigenvectors का उपयोग किया जाता है, तो पहचान मैट्रिक्स है (कोई आयामी कमी नहीं की जाती है, इसलिए "पुनर्निर्माण" सही है)। यदि केवल eigenvectors का एक सबसेट उपयोग किया जाता है, तो यह पहचान नहीं है।XVV⊤pVV⊤
यह पीसी स्पेस में एक मनमाना बिंदु लिए काम करता है; इसे माध्यम से मूल स्थान पर मैप किया जा सकता है ।zx^=zV⊤
पीसी को छोड़ना (हटाना)
कभी-कभी कोई अग्रणी पीसी में से एक या कुछ को छोड़ना (निकालना) चाहता है, इसके बजाय अग्रणी पीसी को रखने और बाकी (जैसा कि ऊपर) को त्यागना चाहता है। इस मामले में सभी सूत्रों रहने बिल्कुल वैसा ही है, लेकिन सभी प्रमुख कुल्हाड़ियों से मिलकर चाहिए सिवाय लोगों को त्याग करना चाहता है के लिए। दूसरे शब्दों में, हमेशा वे सभी पीसी शामिल होने चाहिए जिन्हें कोई रखना चाहता है।VV
सहसंबंध पर पीसीए के बारे में चेतावनी
जब पीसीए सहसंबंध मैट्रिक्स पर किया जाता है (और सहसंयोजक मैट्रिक्स पर नहीं), तो कच्चे डेटा न केवल को घटाकर केंद्रित किया जाता है, बल्कि प्रत्येक कॉलम को इसके मानक विचलन द्वारा विभाजित करके । इस मामले में, मूल डेटा को फिर से संगठित करने के लिए, किसी को साथ के कॉलमों को बैक-स्केल करना और उसके बाद केवल वेक्टर वापस जोड़ना होगा ।XrawμσiX^ μσiμ
छवि प्रसंस्करण उदाहरण
यह विषय अक्सर छवि प्रसंस्करण के संदर्भ में सामने आता है। लेनना पर विचार करें - छवि प्रसंस्करण साहित्य में मानक छवियों में से एक (यह कहां से आता है यह जानने के लिए लिंक का पालन करें)। नीचे बाईं ओर, मैं इस छवि ( यहां उपलब्ध फ़ाइल ) का ग्रेस्केल संस्करण प्रदर्शित करता हूं ।512×512
हम इस स्केल इमेज को डेटा मैट्रिक्स । मैं इस पर पीसीए प्रदर्शन करता हूं और पहले 50 प्रमुख घटकों का उपयोग करके गणना करता हूं । परिणाम दाईं ओर प्रदर्शित होता है।एक्स कच्चे एक्स कच्चे512×512XrawX^raw
एसवीडी को वापस लाना
पीसीए एकवचन मूल्य अपघटन (एसवीडी) से बहुत निकट से संबंधित है, एसवीडी और पीसीए के बीच संबंध देखें
। PCA करने के लिए SVD का उपयोग कैसे करें? अधिक जानकारी के लिए। यदि एक मैट्रिक्स , SVD-ed as और एक -dimensional वेक्टर का चयन करता है जो "कम" क्षेत्र में बिंदु का प्रतिनिधित्व करता है। की आयाम, फिर इसे वापस करने के लिए मैप करने के लिए आयाम एक से गुणा करने के लिए की जरूरत है ।एक्स एक्स = यू एस वी ⊤ k जेड यू कश्मीर पी एस ⊤ 1 : कश्मीर , 1 : कश्मीर वी ⊤ : , 1 : कश्मीरn×pXX=USV⊤kzUkpS⊤1:k,1:kV⊤:,1:k
R, Matlab, Python और Stata में उदाहरण हैं
मैं फिशर आइरिस डेटा पर पीसीए का संचालन करूंगा और फिर पहले दो प्रमुख घटकों का उपयोग करके इसे फिर से संगठित करूंगा । मैं सहसंयोजक मैट्रिक्स पर पीसीए कर रहा हूं, सहसंबंध मैट्रिक्स पर नहीं, अर्थात मैं यहां चर नहीं बढ़ा रहा हूं। लेकिन मुझे अभी भी मतलब जोड़ना है। स्टैटा जैसे कुछ पैकेज, मानक सिंटैक्स के माध्यम से ध्यान रखते हैं। कोड के साथ उनकी मदद के लिए @StasK और @Kodiologist को धन्यवाद।
हम पहले डेटापॉइंट के पुनर्निर्माण की जांच करेंगे, जो है:
5.1 3.5 1.4 0.2
Matlab
load fisheriris
X = meas;
mu = mean(X);
[eigenvectors, scores] = pca(X);
nComp = 2;
Xhat = scores(:,1:nComp) * eigenvectors(:,1:nComp)';
Xhat = bsxfun(@plus, Xhat, mu);
Xhat(1,:)
आउटपुट:
5.083 3.5174 1.4032 0.21353
आर
X = iris[,1:4]
mu = colMeans(X)
Xpca = prcomp(X)
nComp = 2
Xhat = Xpca$x[,1:nComp] %*% t(Xpca$rotation[,1:nComp])
Xhat = scale(Xhat, center = -mu, scale = FALSE)
Xhat[1,]
आउटपुट:
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.0830390 3.5174139 1.4032137 0.2135317
पीसीए के पुनर्निर्माण के उदाहरण के लिए छवियों का पुनर्निर्माण भी इस उत्तर को देखता है ।
अजगर
import numpy as np
import sklearn.datasets, sklearn.decomposition
X = sklearn.datasets.load_iris().data
mu = np.mean(X, axis=0)
pca = sklearn.decomposition.PCA()
pca.fit(X)
nComp = 2
Xhat = np.dot(pca.transform(X)[:,:nComp], pca.components_[:nComp,:])
Xhat += mu
print(Xhat[0,])
आउटपुट:
[ 5.08718247 3.51315614 1.4020428 0.21105556]
ध्यान दें कि यह अन्य भाषाओं के परिणामों से थोड़ा अलग है। ऐसा इसलिए है क्योंकि आइरिस डेटासेट के पायथन संस्करण में गलतियाँ हैं ।
Stata
webuse iris, clear
pca sep* pet*, components(2) covariance
predict _seplen _sepwid _petlen _petwid, fit
list in 1
iris seplen sepwid petlen petwid _seplen _sepwid _petlen _petwid
setosa 5.1 3.5 1.4 0.2 5.083039 3.517414 1.403214 .2135317