sklearn中的pca.inverse_transform

时间:2019-04-05 10:12:21

标签: python scikit-learn pca

将我的数据放入 X =我的数据

pca = PCA(n_components=1)
pca.fit(X)
X_pca = pca.fit_transform(X)

现在X_pca具有一维。

按定义执行逆变换时,不是应该返回原始数据,即X二维数组吗?

当我这样做

X_ori = pca.inverse_transform(X_pca)

我得到相同的尺寸,但是数字不同。

此外,如果我同时绘制X和X_ori,则它们是不同的。

2 个答案:

答案 0 :(得分:2)

之所以不能这样做,是因为通过使用PCA缩小尺寸,您已经丢失了信息(请检查pca.explained_variance_ratio_以了解所剩信息的百分比)。但是,它会尽最大可能返回原始空间,请参见下图 Comparison of original points with transformed points where information is lost

(由

生成
import numpy as np
from sklearn.decomposition import PCA
pca = PCA(1)
X_orig = np.random.rand(10, 2)
X_re_orig = pca.inverse_transform(pca.fit_transform(X_orig))

plt.scatter(X_orig[:, 0], X_orig[:, 1], label='Original points')
plt.scatter(X_re_orig[:, 0], X_re_orig[:, 1], label='InverseTransform')
[plt.plot([X_orig[i, 0], X_re_orig[i, 0]], [X_orig[i, 1], X_re_orig[i, 1]]) for i in range(10)]
plt.legend()
plt.show()

) 如果您将n_dimensions保持相同(设置pca = PCA(2),则可以恢复原始点(新点位于原始点之上):
New points on top of original points

答案 1 :(得分:1)

  

当我按定义执行逆变换时,它是否应该返回原始数据

否,仅当您指定的组件数与输入数据的维数相同时,才可以期望这样做。对于任何小于此数的n_component,在应用逆PCA变换后,您得到的数字将不同于原始数据集:下图给出了二维说明。

enter image description here