PCA人脸图片降维及展示
时间: 2023-08-31 18:06:30 浏览: 92
PCA人脸图片降维及展示的步骤如下:
1. 读取人脸图片数据集,将图片转为灰度图并转换为二维矩阵。
2. 对矩阵进行均值中心化处理,即每个像素减去所有图片对应像素的平均值。
3. 计算协方差矩阵。
4. 对协方差矩阵进行特征值分解,得到特征向量和特征值。
5. 选择前k个特征向量,将原始图片矩阵投影到这k个特征向量上,得到新的降维后的矩阵。
6. 将降维后的矩阵反投影到原始空间,得到新的降维后的人脸图片。
7. 展示原始图片和降维后的图片进行比较,观察是否丢失了重要信息。
下面是Python代码示例:
``` python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_olivetti_faces
from sklearn.decomposition import PCA
# 读取人脸数据集
data = fetch_olivetti_faces()
faces = data.images
n_samples, h, w = faces.shape
# 将图片转为二维矩阵
X = faces.reshape((n_samples, h * w))
# PCA降维
n_components = 100
pca = PCA(n_components=n_components, svd_solver='randomized', whiten=True)
X_pca = pca.fit_transform(X)
# 将降维后的矩阵反投影到原始空间
X_new = pca.inverse_transform(X_pca)
# 将降维前后的图片进行比较
n_row, n_col = 2, 5
fig, axes = plt.subplots(n_row, n_col, figsize=(10, 4), sharex=True, sharey=True)
for i in range(n_row):
for j in range(n_col):
k = i * n_col + j
ax = axes[i, j]
if i == 0:
ax.imshow(faces[k], cmap='gray')
ax.set_title("Original")
else:
ax.imshow(X_new[k].reshape(h, w), cmap='gray')
ax.set_title("PCA")
ax.axis('off')
plt.tight_layout()
plt.show()
```
运行代码后,可以看到原始图片和PCA降维后的图片进行了对比展示,观察是否丢失了重要信息。
阅读全文