用pca函数对yale数据集进行降维,并画出前20个特征向量的图像
时间: 2024-05-13 22:19:36 浏览: 12
首先需要导入必要的库和数据集:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from scipy.io import loadmat
# 加载数据集
yale = loadmat('yalefaces.mat')
X = yale['fea']
```
接下来,我们使用 PCA 函数对数据集进行降维:
```python
# 初始化 PCA
pca = PCA(n_components=20)
# 对数据进行降维
X_pca = pca.fit_transform(X)
```
最后,我们可以使用 Matplotlib 库将前 20 个特征向量的图像画出来:
```python
# 画出前 20 个特征向量的图像
fig, axes = plt.subplots(4, 5, figsize=(8, 8),
subplot_kw=dict(xticks=[], yticks=[]))
for i, ax in enumerate(axes.flat):
ax.imshow(pca.components_[i].reshape(42, 48), cmap='gray')
ax.set_title("PC {}".format(i + 1))
```
完整的代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from scipy.io import loadmat
# 加载数据集
yale = loadmat('yalefaces.mat')
X = yale['fea']
# 初始化 PCA
pca = PCA(n_components=20)
# 对数据进行降维
X_pca = pca.fit_transform(X)
# 画出前 20 个特征向量的图像
fig, axes = plt.subplots(4, 5, figsize=(8, 8),
subplot_kw=dict(xticks=[], yticks=[]))
for i, ax in enumerate(axes.flat):
ax.imshow(pca.components_[i].reshape(42, 48), cmap='gray')
ax.set_title("PC {}".format(i + 1))
```