scikit-learn的PCA的PC2意外

时间:2018-07-20 08:27:43

标签: scikit-learn pca

我简化了案件。

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import pandas as pd

data = pd.DataFrame([
    [1., 1., 1.,],
    [1., 1., 1.,],
    [-1., -1., -1.,],
    [-1., -1., -1.,],
])
x_std = StandardScaler().fit_transform(data)
print('x_std...', x_std)

pca = PCA(n_components=2)
y = pca.fit_transform(x_std)
print('y...', y)

结果是

x_std... [[ 1.  1.  1.]
 [ 1.  1.  1.]
 [-1. -1. -1.]
 [-1. -1. -1.]]
y... [[ 1.73205081e+00  6.79869978e-17]
 [ 1.73205081e+00 -2.26623326e-17]
 [-1.73205081e+00  2.26623326e-17]
 [-1.73205081e+00  2.26623326e-17]]

我期望第一和第二个原始数据(PC1,PC2)的值应该相同,但事实并非如此。

第二次试用,我将原始数据添加到数据中。

data = pd.DataFrame([
    [1., 1., 1.,],
    [1., 1., 1.,],
    [1., 1., 1.,],
    [-1., -1., -1.,],
    [-1., -1., -1.,],
    [-1., -1., -1.,],
])
x_std = StandardScaler().fit_transform(data)
print('x_std...', x_std)

pca = PCA(n_components=2)
y = pca.fit_transform(x_std)
print('y...', y)

结果是

x_std... [[ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]
 [-1. -1. -1.]
 [-1. -1. -1.]
 [-1. -1. -1.]]
y... [[ 1.73205081e+00  4.57971869e-16]
 [ 1.73205081e+00 -9.15943738e-17]
 [ 1.73205081e+00 -9.15943738e-17]
 [-1.73205081e+00  9.15943738e-17]
 [-1.73205081e+00  9.15943738e-17]
 [-1.73205081e+00  9.15943738e-17]]

为什么原始的PC2值怪异?

0 个答案:

没有答案