本文共 1664 字,大约阅读时间需要 5 分钟。
问题1:什么是MNIST数据集?
MNIST 数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST). 训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员. 测试集(test set) 也是同样比例的手写数字数据。该问题解决的是把28x28像素的灰度手写数字图片识别为相应的数字,其中数字的范围从0到9
问题2: 利用sklearn如何加载MNIST数据集?
import numpy as np from sklearn.datasets import fetch_mldatamnist = fetch_mldata('MNIST original')print mnist X, y = mnist['data'], mnist['target']print X.shape
注意是利用fetch_mldata方法。 如果报Socket Error,请检查能否访问 链接。如果加载成功的话,这个数据是7w条,特征值是784, 因为这个是一个28*28像素的图片。
问题3: 如果sklearn下载一直报socket error,那怎么办?
答:有时由于网络问题无法访问上面链接。那可以访问,通过这个路径就可以直接把文件下载下来。然后把文件放到data_home路径下。可以通过以下代码获取data_home路径。
from sklearn.datasets import get_data_homeprint get_data_home()
实例代码:
from timeit import timeitfrom sklearn.datasets import fetch_mldatafrom sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.decomposition import PCAmnist = 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、
2、
转载地址:http://hhkai.baihongyu.com/