PCA in sklearn vs numpy is diferent.
<p>Am i misunderstanding something. This is my code </p>

<p><strong>using sklearn</strong></p>

<pre><code>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)
</code></pre>

<p><strong>Output:</strong></p>

<pre><code>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]])
</code></pre>

<p><strong>Using numpy methods</strong> </p>

<pre><code>x_std = StandardScaler().fit_transform(x)
cov = np.cov(X.T)
ev , eig = np.linalg.eig(cov)
a = eig.dot(x_std.T)
</code></pre>

<p><strong>Output</strong> </p>

<pre><code>array([[ 1.38252552, -1.25240764,  0.2133338 ],
       [-0.53279935, -0.44541231, -0.77988021],
       [-0.45230635,  0.21983192, -1.23796328],
       [-0.39741982,  1.47798804,  1.80450969]])
</code></pre>

<p>I have kept all 3 components but it doesnt seem to allow me to retain my original data. </p>

<p>May i know why is it so? </p>

<p>Don't use <code>StandardScaler</code>.  Instead, just subtract the mean of each column from <code>x</code>:</p>

<pre><code>In [92]: xm = x - x.mean(axis=0)

In [93]: cov = np.cov(xm.T)

In [94]: evals, evecs = np.linalg.eig(cov)

In [95]: xm.dot(evecs)
Out[95]: 
array([[ -4.2532e+03,  -8.3786e-03,  -8.4129e-01],
       [  2.9728e+03,   1.8248e-01,  -1.2598e-01],
       [  3.6248e+03,  -1.6522e-01,  -1.5684e-01],
       [ -2.3443e+03,  -8.8739e-03,   1.1241e+00]])
</code></pre>

<p>That last result contains the same information as the <code>sklearn</code> result, but the order of the columns is different.</p>

python numpy scikit-learn