首页 > 解决方案 > 如何在 PCA 之后从 Python 中的第一个组件重建图像?

问题描述

如何在 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")

标签: pythonpca

解决方案


您已传递n_components = 3PCA,这意味着您将拥有三个主要组件。所以当你这样做时,

projected = pca.fit_transform(patches_reshaped.data)

您将在三个 3 主轴上投影数据,这意味着您的输出将是 shape (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。有关更多详细信息,您可以查看此处的文档此处的源代码。

# 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)

推荐阅读