使用Kmeans之前是否需要从MNIST中提取特征向量

时间:2019-06-04 14:15:50

标签: python scikit-learn cluster-analysis k-means mnist

我正在sklearn.cluster.KMeans和MNIST一起练习。

直觉上,我只是将训练数据适合sklearn函数。但是我的准确度很低。我想知道我错过了哪一步。我是否应该首先通过PCA提取特征向量?还是应该更改更大的n_clusters

from sklearn import cluster
from sklearn.metrics import accuracy_score

clf = cluster.KMeans(init='k-means++', n_clusters=10, random_state=42)

clf.fit(X_train)

y_pred=clf.predict(X_test)

print(accuracy_score(y_test, y_pred))

结果我变得很穷0.137。有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:2)

您如何传递图像?像素是否变平或保持为2d格式?像素是否已归一化为0-1?

在运行群集时,无论如何我都建议不要使用PCA,而是选择保留邻居信息的T-SNE,但是在运行K-Means之前,您应该不需要这样做。

调试的最佳方法是查看拟合模型对集群的预测。您可以在此处查看示例: https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_digits.html

使用此信息,您可以了解错误可能在哪里。祝你好运!


添加注释:K-Means可能也不是适合您的最佳模型。最好是在无监督的上下文中对数据进行聚类。而MNIST是分类用例。 KNN是一个更好的选择,同时仍然允许您尝试使用邻居等。

以下是我使用KNN创建的示例:https://gist.github.com/andrew-x/0bb997b129647f3a7b7c0907b7e836fc

答案 1 :(得分:0)

除非我遗漏了一些东西:您正在将簇标签(任意编号为0-9)与簇标签(任意编号为0-9)进行比较。群集中的0可能不会以群集号0结尾,但这是您所做的比较。因此,对聚类结果的评估有所不同。一些获得正确评估的选项: