导入MNIST数据集,首先把矩阵灰度图像输入转化为向量输入,针对“0”和“1”这两一类各自前1000个训练样本组成的样本集,依次计算前N个PC分量的累计方差占比(N=1,2,3,…,100),绘制累计方差占比随着N变化的曲线图
时间: 2023-12-11 21:02:13 浏览: 160
两类label(0,1)的MNIST数据集
以下是实现上述功能的Python代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.decomposition import PCA
mnist = fetch_openml('mnist_784')
# 将矩阵灰度图像转化为向量输入
X = mnist.data / 255.0
y = mnist.target
# 选取0和1这两类各自前1000个训练样本
X_01 = X[(y == '0') | (y == '1')]
y_01 = y[(y == '0') | (y == '1')]
# 计算前N个PC分量的累计方差占比
pca = PCA(n_components=100)
X_01_pca = pca.fit_transform(X_01)
variance_ratios = []
for i in range(1, 101):
variance_ratios.append(np.sum(pca.explained_variance_ratio_[:i]))
# 绘制累计方差占比随着N变化的曲线图
plt.plot(variance_ratios)
plt.xlabel('Number of PC components')
plt.ylabel('Cumulative variance ratio')
plt.title('Cumulative Variance Ratio vs. Number of PC components')
plt.show()
```
该代码会输出一张累计方差占比随着N变化的曲线图,用于帮助我们选择合适的PC数量。
阅读全文