代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import fetch_olivetti_faces
# 加载Olivetti人脸数据集
data = fetch_olivetti_faces()
X = data.data
images = data.images
# 设置不同的PCA组件数
components = [10, 50, 100, 150, 200]
errors = []
h, w = images.shape[1:3]
for n_components in components:
# 应用PCA
pca = PCA(n_components=n_components)
X_pca = pca.fit_transform(X)
X_reconstructed = pca.inverse_transform(X_pca)
# 计算重建误差
error = np.mean((X - X_reconstructed) ** 2)
errors.append(error)
# 显示重建的示例图像
example_reconstructed = X_reconstructed[0].reshape((h, w))
plt.imshow(example_reconstructed, cmap='gray')
plt.title(f"Reconstructed Image with {n_components} components")
plt.show()
# 显示误差图表
plt.figure()
plt.plot(components, errors, marker='o')
plt.xlabel('Number of Components')
plt.ylabel('Reconstruction Error')
plt.title('PCA Reconstruction Error vs. Number of Components')
plt.show()
Matplotlib(plt)函数详解
该代码段展示了如何使用Matplotlib(通常缩写为plt)进行数据可视化。以下是对代码中使用的每个plt函数及其参数的详细解释:
1. imshow()
- 用途:显示图像。
- 参数:
- 第一个参数:图像数据,在这个例子中是重建后的图像。
cmap='gray'
:颜色映射,‘gray’ 表示灰度图。- 其他参数:如
title
设置图像的标题。
2. title()
- 用途:为图像设置标题。
- 参数:
- 第一个参数:字符串,表示标题文本。
3. show()
- 用途:显示之前用
imshow()
等函数准备的图像或图表。 - 参数:无。调用时会将之前准备的所有图像或图表呈现出来。
4. figure()
- 用途:创建一个新的图表窗口。
- 参数:可选参数,如图表的大小。
5. plot()
- 用途:绘制线图。
- 参数:
- 第一个参数:x轴数据。
- 第二个参数:y轴数据。
marker='o'
:指定数据点的标记样式,‘o’ 表示圆圈。
6. xlabel()
和 ylabel()
- 用途:设置x轴和y轴的标签。
- 参数:轴标签的文本。
7. title()
- 用途:为整个图表设置标题。
- 参数:标题文本。
通过以上的plt函数,我们可以对PCA的重建效果进行可视化,并观察不同维度下的重建误差变化。