आपको पीसीए करने से पहले डेटा को सामान्य बनाना चाहिए। उदाहरण के लिए, निम्नलिखित स्थिति पर विचार करें।
>> C = [1 0.5; 0.5 1];
>> A = chol(rho);
>> X = randn(100,2) * A;
मैं अब पीसीए प्रदर्शन करते हैं, मैं सही ढंग से लगता है कि प्रिंसिपल घटकों (वजन वेक्टर की पंक्तियों) समन्वय कुल्हाड़ियों के लिए एक कोण पर उन्मुख होते हैं: मैं एक डेटा एक ज्ञात सहसंबंध मैट्रिक्स C
के साथ सेट X
बनाने :
>> wts=pca(X)
wts =
0.6659 0.7461
-0.7461 0.6659
अब मैं डेटा 100 द्वारा निर्धारित की पहली फीचर पैमाने हैं, तो सहज हम सोचते हैं कि प्रिंसिपल घटकों परिवर्तन नहीं होना चाहिए:
>> Y = X;
>> Y(:,1) = 100 * Y(:,1);
हालांकि, अब हम पाते हैं कि प्रिंसिपल घटकों समन्वय कुल्हाड़ियों के साथ गठबंधन कर रहे हैं:
>> wts=pca(Y)
wts =
1.0000 0.0056
-0.0056 1.0000
इसके समाधान के लिए, वहाँ दो विकल्प हैं। सबसे पहले, मैं डेटा rescale सकता है:
>> Ynorm = bsxfun(@rdivide,Y,std(Y))
(अजीब bsxfun
अंकन मैटलैब में वेक्टर-मैट्रिक्स गणित करने के लिए प्रयोग किया जाता है - सब मैं कर रहा हूँ मतलब घटाकर और प्रत्येक सुविधा के मानक विचलन से विभाजित है) ।
अब हम पीसीए से समझदार परिणाम प्राप्त:
>> wts = pca(Ynorm)
wts =
-0.7125 -0.7016
0.7016 -0.7125
वे थोड़ा मूल डेटा पर पीसीए को अलग कर रहे हैं क्योंकि अब हम गारंटी है कि हमारे सुविधाओं, इकाई मानक विचलन है जो नहीं था मूल रूप से मामला।
>> wts = pca(Y,'corr')
wts =
0.7071 0.7071
-0.7071 0.7071
वास्तव में यह पूरी तरह से मतलब घटाकर की तारीख मानकीकरण और फिर से विभाजित करने के बराबर है:
अन्य विकल्प बाहरी उत्पाद के बजाय, डेटा के सहसंबंध मैट्रिक्स का उपयोग कर पीसीए प्रदर्शन करने के लिए है मानक विचलन। यह बस अधिक सुविधाजनक है। मेरी राय में आप हमेशा इस जब तक आप एक अच्छे कारण के लिए है क्या करना चाहिए नहीं करने के लिए (उदाहरण के लिए यदि आप चाहते प्रत्येक सुविधा की भिन्नता में मतभेद लेने के लिए)।