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

Python 在使用Kmeans之前,是否需要从MNIST中提取特征向量,python,scikit-learn,cluster-analysis,k-means,mnist,Python,Scikit Learn,Cluster Analysis,K Means,Mnist,我正在通过sklearn.cluster.KMeans使用MNIST进行练习 直观地说,我只是将训练数据拟合到sklearn函数中。但我的准确度很低。我想知道我错过了哪一步。我应该首先通过PCA提取特征向量吗?或者我应该换一个更大的n_集群 from sklearn import cluster from sklearn.metrics import accuracy_score clf = cluster.KMeans(init='k-means++', n_clusters=10, ran

我正在通过
sklearn.cluster.KMeans
使用MNIST进行练习

直观地说,我只是将训练数据拟合到sklearn函数中。但我的准确度很低。我想知道我错过了哪一步。我应该首先通过PCA提取特征向量吗?或者我应该换一个更大的
n_集群

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
。有什么建议吗?谢谢

您是如何将图像传递进来的?像素是否被展平或保持为2d格式?像素是否被标准化为介于0-1之间

由于您正在运行群集,我建议您不要使用PCA,而是选择保留邻里信息的T-SNE,但在运行K-Means之前,您不需要这样做

调试的最佳方法是查看拟合模型预测的集群。您可以在此处看到一个示例:

有了这些信息,你可以知道错误可能在哪里。祝你好运


补充一点:K-Means也可能不是您的最佳模型。最好让无监督的上下文对数据进行聚类。然而,MNIST是一个分类用例。KNN将是一个更好的选择,同时仍然允许您与邻居等进行试验


下面是我用KNN创建的一个示例:

您如何传递图像?像素是否被展平或保持为2d格式?像素是否被标准化为介于0-1之间

由于您正在运行群集,我建议您不要使用PCA,而是选择保留邻里信息的T-SNE,但在运行K-Means之前,您不需要这样做

调试的最佳方法是查看拟合模型预测的集群。您可以在此处看到一个示例:

有了这些信息,你可以知道错误可能在哪里。祝你好运


补充一点:K-Means也可能不是您的最佳模型。最好让无监督的上下文对数据进行聚类。然而,MNIST是一个分类用例。KNN将是一个更好的选择,同时仍然允许您与邻居等进行试验


下面是我用KNN创建的一个示例:

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

  • 生成一个图形并绘制它
  • 计算

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

  • 生成一个图形并绘制它
  • 计算

KMeans
是一种聚类算法,并不完全适合对图像进行分类。您可以尝试使用
KNeighborsClassifier
,与其他分类算法一起使用。
KMeans
是一种聚类算法,并不完全适合对图像进行分类。您可以尝试使用
KNeighborsClassifier
以及其他分类算法。感谢您的见解。相反,我尝试KNN,发现了一个令人费解的现象。当我将最初的60000个训练样本拟合到
sklearn.neighborsClassifier.KNeighborsClassifier
时,我在10000个样本的测试集中获得了0.15左右的准确度。然后我换成了由
sklearn
提供的mini-MNIST,它有大约1000个训练样本和100个测试样本。我得到了一个欺骗性的0.99左右的准确度。考虑到样品的数量,我认为这不是一个合理的结果。。。[cont]同时,我正在用深度神经网络完成同样的任务,用60000个训练样本轻松突破98%的准确率。与具有相同数据量的深度神经网络相比,您认为KNN作为一种传统方法,其先前的性能差(精度为0.15)是否应归咎于此?还是我处理不当?我用我创建的使用KNN而不是MNIST的要点链接更新了答案。它能够在测试集上获得大约98%的数据。希望它能帮助你调试你的模型。谢谢你的洞察力。相反,我尝试KNN,发现了一个令人费解的现象。当我将最初的60000个训练样本拟合到
sklearn.neighborsClassifier.KNeighborsClassifier
时,我在10000个样本的测试集中获得了0.15左右的准确度。然后我换成了由
sklearn
提供的mini-MNIST,它有大约1000个训练样本和100个测试样本。我得到了一个欺骗性的0.99左右的准确度。考虑到样品的数量,我认为这不是一个合理的结果。。。[cont]同时,我正在用深度神经网络完成同样的任务,用60000个训练样本轻松突破98%的准确率。与具有相同数据量的深度神经网络相比,您认为KNN作为一种传统方法,其先前的性能差(精度为0.15)是否应归咎于此?还是我处理不当?我用我创建的使用KNN而不是MNIST的要点链接更新了答案。它能够在测试集上获得大约98%的数据。希望它能帮助您调试您的模型。