我正在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
。有什么建议吗?谢谢!
答案 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结尾,但这是您所做的比较。因此,对聚类结果的评估有所不同。一些获得正确评估的选项: