问题1:什么是MNIST数据集?
MNIST 数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST). 训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员. 测试集(test set) 也是同样比例的手写数字数据。该问题解决的是把28x28像素的灰度手写数字图片识别为相应的数字,其中数字的范围从0到9
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSPZRVT4VERNVTRE5ENBpWW040MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1kTM0QjM1kDM4ATMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
问题2: 利用sklearn如何加载MNIST数据集?
import numpy as np
from sklearn.datasets import fetch_mldata
mnist = fetch_mldata('MNIST original')
print mnist
X, y = mnist['data'], mnist['target']
print X.shape
注意是利用fetch_mldata方法。 如果报Socket Error,请检查能否访问http://mldata.org/repository/data/download/matlab/mnist-original 链接。如果加载成功的话,这个数据是7w条,特征值是784, 因为这个是一个28*28像素的图片。
问题3: 如果sklearn下载一直报socket error,那怎么办?
答:有时由于网络问题无法访问上面链接。那可以访问这个路径,通过这个路径就可以直接把文件下载下来。然后把文件放到data_home路径下。可以通过以下代码获取data_home路径。
from sklearn.datasets import get_data_home
print get_data_home()
实例代码:
from timeit import timeit
from sklearn.datasets import fetch_mldata
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.decomposition import PCA
mnist = fetch_mldata('MNIST original')
X, y = mnist['data'], mnist['target']
def test():
print X.shape
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
knn_clf = KNeighborsClassifier()
# knn_clf.fit(X_train, y_train)
# # 0.9707428571428571
# print X_train.shape
# print knn_clf.score(X_test, y_test)
pca = PCA(0.9)
pca.fit(X_train, y_train)
print pca
X_train_reduction = pca.transform(X_train)
X_test_reduction = pca.transform(X_test)
knn_clf.fit(X_train_reduction, y_train)
print knn_clf.score(X_test_reduction, y_test)
运行结论:
1、不用PCA的时候,运行大概15min左右,准确度在97%左右
2、使用PCA后,降维到87维,准确率大概在98%以上,运行时间在2分钟以内,这说明使用PCA后把数据中的一些噪音去掉了,从而是准确度提高了,并且节省了时间。
参考资料:
1、 详解 MNIST 数据集
2、MNIST 数据介绍
3、使用PCA + KNN对MNIST数据集进行手写数字识别