导入MNIST数据集,首先把矩阵灰度图像输入转化为向量输入。针对“0”和“1”这两一类各自前1000个训练样本组成的样本集合(共2000个样本),绘制“0”“1”两类样本混合的“本征数字”。依次计算前N个PC分量的累计方差占比(N=1,2,3,…,100),只保留达到85%累计方差占比的前K个PC,把每个样本逆变换到原始输入向量空间(提示:利用PCA()函数的inverse_transform方法),得到“降维重构”的样本。计算原始向量空间中这些“降维重构”样本的均值向量,然后变换为矩阵,用灰度图像显示。以上内容的python代码是什么
时间: 2024-02-15 11:03:56 浏览: 70
以下是Python代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import fetch_openml
# 导入MNIST数据集
mnist = fetch_openml('mnist_784', version=1)
X = mnist.data.astype('float64')
y = mnist.target.astype('int64')
# 将矩阵灰度图像输入转化为向量输入
X = X / 255.0
# 选取“0”和“1”两类各自前1000个训练样本组成的样本集合
X_01 = X[(y == 0) | (y == 1)]
y_01 = y[(y == 0) | (y == 1)]
# 绘制“0”“1”两类样本混合的“本征数字”
pca = PCA()
pca.fit(X_01)
eigen_digits = pca.components_.reshape((2, 28, 28))
fig, axs = plt.subplots(2, 10, figsize=(10,2.5))
for i in range(2):
for j in range(10):
axs[i,j].imshow(eigen_digits[i].reshape(28, 28), cmap='gray')
axs[i,j].axis('off')
plt.show()
# 计算前N个PC分量的累计方差占比,只保留达到85%累计方差占比的前K个PC
cumulative_variance_ratio = np.cumsum(pca.explained_variance_ratio_)
K = np.argmax(cumulative_variance_ratio >= 0.85) + 1
# 逆变换得到“降维重构”的样本
pca = PCA(n_components=K)
X_01_reduced = pca.fit_transform(X_01)
X_01_reconstructed = pca.inverse_transform(X_01_reduced)
# 计算原始向量空间中这些“降维重构”样本的均值向量
mean_digit = np.mean(X_01_reconstructed, axis=0)
# 变换为矩阵,用灰度图像显示
plt.imshow(mean_digit.reshape(28, 28), cmap='gray')
plt.axis('off')
plt.show()
```
阅读全文