之前做过一个使用K-means对MNIST数据集进行聚类分析的简单练习,但最近在CSDN上搜索发现许多相关内容是过于复杂,不便于初学者理解,因此在这里提供一种较为简单的聚类方法。
当然MNIST数据集较大,传统聚类不一定能取得较好效果,还是建议使用深度聚类算法对该数据集进行聚类分析。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.metrics import accuracy_score
# 加载MNIST数据集
digits = load_digits()
X = digits.data
y = digits.target
# 数据归一化处理
X_norm = (X - np.min(X)) / (np.max(X) - np.min(X))
# 使用PCA降维到2维方便可视化
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_norm)
# K-means进行聚类
kmeans = KMeans(n_clusters=10, random_state=42)
y_pred = kmeans.fit_predict(X_norm)
# 可视化聚类结果
labels = kmeans.labels_
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=labels, cmap='viridis')
plt.title("K-means Clustering of MNIST Data")
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.colorbar(label="Cluster")
plt.show()
# 输出分类准确度
accuracy = accuracy_score(y, y_pred)
print("分类准确度:", accuracy)
分类准确度: 0.18697829716193656