导入MNIST数据集,首先把矩阵灰度图像输入转化为向量输入。单独取出“0”至“9”每一类的前1000个样本,依次计算前N个PC分量的累计方差占比(N=1,2,3,…,100),依次计算前N个PC分量的累计方差占比(N=1,2,3,…,100),只保留达到85%累计方差占比的前K个PC,把每个样本逆变换到原始输入向量空间(提示:利用PCA()函数的inverse_transform方法),得到“降维重构”的样本。分别计算原始向量空间中每一类数字“降维重构”样本的均值向量,然后变换为矩阵,用灰度图像显示,得到10张灰度图像。以上内容的python代码是什么
时间: 2024-02-15 08:04:13 浏览: 74
loadMNIST.rar_MNIST_matlab 导入mnist_matlab训练MNIST_nist test_rs im
5星 · 资源好评率100%
以下是Python代码实现:
```python
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
# 导入MNIST数据集
mnist = fetch_openml('mnist_784')
X = mnist.data.astype('float64')
y = mnist.target.astype('int64')
# 把矩阵灰度图像输入转化为向量输入
X = X.reshape((X.shape[0], -1))
# 取出“0”至“9”每一类的前1000个样本
X_1000 = []
for i in range(10):
X_i = X[y == i][:1000]
X_1000.append(X_i)
# 计算前N个PC分量的累计方差占比
pca = PCA()
pca.fit(X)
var_ratio_cumsum = np.cumsum(pca.explained_variance_ratio_)
# 只保留达到85%累计方差占比的前K个PC
n_components = np.argmax(var_ratio_cumsum >= 0.85) + 1
pca = PCA(n_components=n_components)
pca.fit(X)
# 把每个样本逆变换到原始输入向量空间
X_reconstructed = []
for i in range(10):
X_i = X_1000[i]
X_i_reconstructed = pca.inverse_transform(pca.transform(X_i))
X_reconstructed.append(X_i_reconstructed)
# 计算原始向量空间中每一类数字“降维重构”样本的均值向量
X_mean = []
for i in range(10):
X_i_reconstructed = X_reconstructed[i]
X_i_mean = np.mean(X_i_reconstructed, axis=0)
X_mean.append(X_i_mean)
# 变换为矩阵,用灰度图像显示
for i in range(10):
X_i_mean = X_mean[i]
X_i_mean_image = X_i_mean.reshape((28, 28))
plt.subplot(2, 5, i+1)
plt.imshow(X_i_mean_image, cmap='gray')
plt.axis('off')
plt.show()
```
输出结果为10张灰度图像,分别是每个数字的“降维重构”样本的均值向量。
阅读全文