导入MNIST数据集,首先把矩阵灰度图像输入转化为向量输入。针对“0”和“1”这两一类各自前1000个训练样本组成的样本集合(共2000个样本),依次计算前N个PC分量的累计方差占比(N=1,2,3,…,100),绘制累计方差占比随着N变化的曲线图,要达到85%的累计方差占比,需要多少个PC(将这个数目记为K),以上内容的python代码是什么
时间: 2024-02-15 16:03:37 浏览: 149
以下是实现上述要求的Python代码:
```python
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# 导入MNIST数据集
from keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 将矩阵灰度图像转化为向量输入
X_train = X_train.reshape(X_train.shape[0], -1)
X_test = X_test.reshape(X_test.shape[0], -1)
# 筛选出数字0和1的样本
X_01 = np.concatenate([X_train[y_train==0][:1000], X_train[y_train==1][:1000]], axis=0)
# 计算前N个PC分量的累计方差占比
pca = PCA()
pca.fit(X_01)
variance_ratio_cumsum = np.cumsum(pca.explained_variance_ratio_)
# 绘制累计方差占比随着N变化的曲线图
plt.plot(variance_ratio_cumsum)
plt.xlabel('Number of PC')
plt.ylabel('Cumulative variance ratio')
plt.show()
# 计算达到85%累计方差占比需要的PC数量K
K = np.argmax(variance_ratio_cumsum >= 0.85) + 1
print('Number of PC needed to reach 85% cumulative variance ratio:', K)
```
运行以上代码,即可得到累计方差占比随着PC数量变化的曲线图并计算出需要的PC数量K。
阅读全文