如何在PCA之后从Python中的第一个组件重建图像?
我的尝试
from sklearn.datasets import load_sample_image
from sklearn.feature_extraction import image
from sklearn.decomposition import PCA
# Create patches of size 25 by 25 and create a matrix from all patches
patches = image.extract_patches_2d(grayscale_image, (25, 25), random_state = 42)
#reshape patches
patches_reshaped = patches.reshape(patches.shape[0],-1)
# PCA
pca = PCA(n_components = 3,random_state = 42)
pca.fit(patches_reshaped)
first_component = pca.components_[0] #first component
# attempt to reconstruct image from first component
plt.imshow(pca.components_[0].reshape(25, 25),"gray")
答案 0 :(得分:1)
您已将n_components = 3
传递给PCA
,这意味着您将具有三个主要组成部分。因此,当您这样做时,
projected = pca.fit_transform(patches_reshaped.data)
您将在三个3个主轴上投影数据,这意味着您的输出将呈(patches.shape[0], 3)
形状。
现在要使用第一个主成分进行重构,您要做的就是获取数据在此主轴上的投影,然后对原始域进行逆变换。为此,首先获取第一个主成分:
# First get your first component
first_component = pca.components_[0]
# Make sure your first component is a row vector
first_component = first_component.reshape(1,-1)
然后,逆变换不过是projected_data * principal_components
。有关更多详细信息,请查看文档here和源代码here。
# get the first projection
first_proj = projected[:,0]
# Make sure your first component is a column vector
first_proj = first_proj.reshape(-1,1)
# do inverse transform (No you have to add the mean as thse algorithm
# works on zero mean data)
recon_using_first_comp = np.dot(proj, first_component) + pca.mean_
然后重建补丁以获取最终图像
final_img = image.reconstruct_from_patches_2d(recon_using_first_comp.reshape(-1,25,25), grayscale_image.shape)