Sklearn PCA,如何在较小尺寸上恢复均值?

时间:2019-03-20 14:45:11

标签: python scikit-learn mean pca dimensionality-reduction

此问题涉及执行PCA之后如何在较低维度上对数据进行居中和“还原”。

我正在用sklearn做一个简单的principal component analysis。据我了解,实现应注意(1)在创建组件时将数据居中,以及(2)在转换后使数据居中。但是,转换数据后,它仍然居中。如何在保留原始数据特征的同时将数据投影到较低维度的空间?鉴于我将对高维数据进行降维,因此我没有每个主成分的均值,那怎么得出呢?

将3维缩小为2维:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

X = np.array([[-1, -1, -1], [-2, -1, -1], [-3, -2, -3], [1, 1, 1], [2, 1, 2], [3, 2, 3]]) + 3
X.shape
  

(6,3)

fig = plt.figure(figsize=(10, 8), dpi= 80, facecolor='w', edgecolor='k')
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X[:,0], X[:,1],X[:,2], '*')
plt.title('original')
plt.show()

enter image description here

具有2个组件的PCA:

pca = PCA(n_components=2)
pca.fit(X)
X_trans =pca.transform(X)
X_trans.shape
  

(6,2)

plt.plot(X_trans[:,0], X_trans[:,1], '*')
plt.show()

enter image description here

在此阶段我想做的是在此较低维度中“还原”我的数据,以使数据点的值对应于原始数据。它仍应仅具有2维,但不应以均值为中心。

如下所述,执行逆变换实际上使我回到了3维

X_approx = pca.inverse_transform(X_trans) 
X_approx.shape
  

(6,3)

我想保持二维,但我的数据仍应尽可能接近原始格式,而不是以均值为中心。

1 个答案:

答案 0 :(得分:2)

您只需要拟合数据并绘制转换后的数据即可。要以较低的维度获取原始数据,您需要使用 inverse_transform可以为您提供原始数据,如下图所示。来自docs

  

inverse_transform(X)

     

将数据转换回其原始空间。

pca = PCA(n_components=2)
pca.fit(X)

X_trans =pca.transform(X)
X_original = pca.inverse_transform(X_trans)
plt.plot(X_original[:,0], X_original[:,1], 'r*')

enter image description here