sklearn中的pca.inverse_transform

问题描述 投票:2回答:2

将我的数据拟合到X =我的数据之后

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

现在X_pca有一个维度。

当我按定义执行逆变换时,是不是应该返回原始数据,即X,2-D数组?

当我做

X_ori = pca.inverse_transform(X_pca)

我得到相同的维度,但不同的数字。

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

python scikit-learn pca
2个回答
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
投票

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

不,如果您指定的组件数与输入数据的维度相同,则只能期望这样。对于任何小于此的n_components,在应用逆PCA变换后,您将获得与原始数据集不同的数字:下图给出了二维图示。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.