导入MNIST数据集,首先把矩阵灰度图像输入转化为向量输入。针对“0”和“1”这两一类各自前1000个训练样本组成的样本集合(共2000个样本),利用PCA()函数的fit_transform方法,获得每个样本在前三个PC方向上的分量。以PC1为横轴,PC2为纵轴,考虑“PC1-3特征”的前两维,在PC1和PC2构成的二维空间中画出所有2000个样本的散点图。在PC1-PC2散点图基础上画出高斯混合聚类的中心和3倍方差组成的椭圆形边界(聚类总数设置为2)。以上内容的python代码是什么
时间: 2024-02-15 19:04:27 浏览: 17
以下是实现以上功能的Python代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.mixture import GaussianMixture
# 导入MNIST数据集
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784')
X = mnist.data.astype('float64')
y = mnist.target
# 将矩阵灰度图像输入转化为向量输入
X /= 255.0
# 取出“0”和“1”这两一类各自前1000个训练样本
X_01 = X[(y == '0') | (y == '1')]
y_01 = y[(y == '0') | (y == '1')]
# 利用PCA函数的fit_transform方法,获得每个样本在前三个PC方向上的分量
pca = PCA(n_components=3)
X_pca = pca.fit_transform(X_01)
# 以PC1为横轴,PC2为纵轴,在PC1和PC2构成的二维空间中画出所有2000个样本的散点图
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_01.astype('float'), cmap='coolwarm')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.colorbar()
plt.show()
# 在PC1-PC2散点图基础上画出高斯混合聚类的中心和3倍方差组成的椭圆形边界(聚类总数设置为2)
gmm = GaussianMixture(n_components=2, covariance_type='full')
gmm.fit(X_pca[:, :2])
x = np.linspace(-10.0, 10.0)
y = np.linspace(-10.0, 10.0)
X, Y = np.meshgrid(x, y)
XX = np.array([X.ravel(), Y.ravel()]).T
Z = -gmm.score_samples(XX)
Z = Z.reshape(X.shape)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_01.astype('float'), cmap='coolwarm')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.colorbar()
plt.contour(X, Y, Z, levels=[0.001, 0.01, 0.1, 0.5], colors='black')
plt.show()
```
运行以上代码,即可得到PC1-PC2散点图和高斯混合聚类的中心和椭圆形边界的可视化结果。