为了账号安全,请及时绑定邮箱和手机立即绑定

sklearn 中的 pca.inverse_transform

sklearn 中的 pca.inverse_transform

一只斗牛犬 2021-12-29 20:29:31
将我的数据拟合成 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 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

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

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

//img1.sycdn.imooc.com//61cc54c90001c09b07310739.jpg

查看完整回答
反对 回复 2021-12-29
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

它不能这样做,因为通过使用 PCA 减少维度,您丢失了信息(检查pca.explained_variance_ratio_您仍然拥有的信息百分比)。但是,它尽量回到原来的空间,看下图 

//img1.sycdn.imooc.com//61cc54da0001e83603730249.jpg

(生成与


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),您确实恢复了原始点(新点位于原始点之上):

//img1.sycdn.imooc.com//61cc54e70001ae6b03730247.jpg

查看完整回答
反对 回复 2021-12-29
  • 2 回答
  • 0 关注
  • 547 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号