पीसीपी इन सूपी और स्केलेर अलग परिणाम देता है


21

क्या मैं किसी बात को गलत समझ रहा हूँ? यह मेरा कोड है

कपाल का उपयोग करना

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import decomposition
from sklearn import datasets
from sklearn.preprocessing import StandardScaler

pca = decomposition.PCA(n_components=3)

x = np.array([
        [0.387,4878, 5.42],
        [0.723,12104,5.25],
        [1,12756,5.52],
        [1.524,6787,3.94],
    ])
pca.fit_transform(x)

आउटपुट:

array([[ -4.25324997e+03,  -8.41288672e-01,  -8.37858943e-03],
   [  2.97275001e+03,  -1.25977271e-01,   1.82476780e-01],
   [  3.62475003e+03,  -1.56843494e-01,  -1.65224286e-01],
   [ -2.34425007e+03,   1.12410944e+00,  -8.87390454e-03]])

खस्ता तरीकों का उपयोग करना

x_std = StandardScaler().fit_transform(x)
cov = np.cov(x_std.T)
ev , eig = np.linalg.eig(cov)
a = eig.dot(x_std.T)

उत्पादन

array([[ 0.06406894,  0.94063993, -1.62373172],
   [-0.35357757,  0.7509653 ,  0.63365168],
   [ 0.29312477,  0.6710958 ,  1.11766206],
   [-0.00361615, -2.36270102, -0.12758202]])
I have kept all 3 components but it doesnt seem to allow me to retain my original data.

क्या मुझे पता है कि ऐसा क्यों है?

अगर मुझे अपना मूल मैट्रिक्स वापस प्राप्त करना है तो मुझे क्या करना चाहिए?


आपका खतना कोड गलत है IMHO (भी, यह उपयोग करता है Xजो परिभाषित नहीं है)। अपना गणित रीचेक करें ।
ऐनी-मूस -रिटनेट मोनिका से

मैं ipython नोटबुक का उपयोग कर रहा हूं ताकि मैं केवल कोशिकाओं द्वारा कॉपी कर सकूं। मेरा गणित गलत है? कौन सा हिस्सा @ Anony-Mousse
aceminer

@ Anony-Mousse हाँ मुझे अपनी गलती का एहसास हुआ लेकिन यह अभी भी मेल नहीं खाता है
aceminer

@aceminer मैं उत्सुक हूं कि आप x_std.T के covariance मैट्रिक्स की गणना क्यों करते हैं, x_std की नहीं?
इवगेनी नाबोकोव

@EvgeniNabokov बहुत लंबा हो गया है। Sry मैं पहले से याद नहीं कर सकते
aceminer

जवाबों:


21

अंतर इसलिए है क्योंकि decomposition.PCAपीसीए करने से पहले अपने चर का मानकीकरण नहीं किया जाता है, जबकि आपके मैनुअल कम्प्यूटेशन में आप StandardScalerमानकीकरण करने के लिए कहते हैं । इसलिए, आप इस अंतर को देख रहे हैं: सहसंबंध या सहसंयोजक पर पीसीए?

यदि आप प्रतिस्थापित करते हैं

pca.fit_transform(x)

साथ में

x_std = StandardScaler().fit_transform(x)
pca.fit_transform(x_std)

आपको मैनुअल संगणना के समान परिणाम मिलेगा ...

... लेकिन केवल पीसी के आदेश तक। ऐसा इसलिए क्योंकि जब आप दौड़ते हैं

ev , eig = np.linalg.eig(cov)

जरूरी नहीं कि आप घटते क्रम में आइजनवेल्स प्राप्त करें। मुझे मिला

array([ 0.07168571,  2.49382602,  1.43448827])

इसलिए आप उन्हें मैन्युअल रूप से ऑर्डर करना चाहेंगे। Sklearn करता है कि आप के लिए।


मूल चरों के पुनर्निर्माण के बारे में, कृपया देखें कि PCA को उल्टा कैसे करें और मूल चर को कई प्रमुख घटकों से पुनर्निर्मित करें?


बस जांच करना चाहेंगे। क्या वास्तव में मैट्रिक्स को इसके मानक विचलन द्वारा मानकीकृत करना आवश्यक है? मैंने ऐसे उदाहरण देखे, जहां वे ऐसा नहीं करते हैं
aceminer

यह आवश्यक नहीं है , यह करने का सिर्फ एक तरीका है। वह लिंक देखें जो मैंने पहले पैराग्राफ में रखा था : ysts.stackexchange.com/questions/53 - यह वास्तव में इस प्रश्न के बारे में है। यदि आप मानकीकृत करते हैं, तो आप सहसंबंधों पर पीसीए करते हैं। यदि आप नहीं करते हैं, तो आप कोवरियन पर पीसीए करते हैं।
अमीबा का कहना है कि 14-21 पर मोनिका से

9

यहाँ अजगर में चर्चा और पीसीए के विवरण के साथ एक अच्छा कार्यान्वयन है। यह कार्यान्वयन scikit PCA के समान परिणाम की ओर जाता है। यह एक और संकेतक है कि आपका पीसीए गलत है।

import numpy as np
from scipy import linalg as LA

x = np.array([
        [0.387,4878, 5.42],
        [0.723,12104,5.25],
        [1,12756,5.52],
        [1.524,6787,3.94],
    ])

#centering the data
x -= np.mean(x, axis = 0)  

cov = np.cov(x, rowvar = False)

evals , evecs = LA.eigh(cov)

आपको नीचे उतरते हुए eigenvalues ​​(और तदनुसार eigenvectors) को सॉर्ट करने की आवश्यकता है

idx = np.argsort(evals)[::-1]
evecs = evecs[:,idx]
evals = evals[idx]

a = np.dot(x, evecs) 

आम तौर पर, मैं आपको एक सरल उदाहरण (संभव के रूप में सरल) को लागू करके और सही रेज़लूशन (और मध्यवर्ती परिणाम) की गणना करके अपने कोड की जांच करने की सलाह देता हूं। इससे आपको समस्या की पहचान करने में मदद मिलती है।


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