MNIST 数据集

当我们对原来样本做主成分分析降维后,准确率反而提高了 - 降噪 - 将原有的数据中的噪音消除了。 数据的维度减少,存储空间减少了,数据训练,预测的时间都减少了,预测准确率却提高了. - 降维的过程中把数据的噪音也消除了.

因为mnist数据集中的样本各个特征都是图像的像素点的数值,尺度是相同的,所以可以不用进行归一化处理。当各个维度尺度不同时,归一化是有意义的,把他们放在同样的尺度上在做拟合。

import numpy as np
from sklearn import datasets
from scipy.io import loadmat
mnist_data = loadmat('mnist-original.mat')
X, y = mnist_data['data'].T, mnist_data['label'].T
X_train = np.array(X[:60000], dtype=float)
y_train = np.array(y[:60000], dtype=float)
X_test, y_test = np.array(X[60000:], dtype=float), np.array(y[60000:], dtype=float)
y_train, y_test =  np.squeeze(y_train), np.squeeze(y_test)
from sklearn.neighbors import KNeighborsClassifier
knn_clf = KNeighborsClassifier()
%time knn_clf.fit(X_train, y_train)
%time knn_clf.score(X_test, y_test)

结果:

CPU times: total: 62.5 ms
Wall time: 68 ms
CPU times: total: 1min 15s
Wall time: 12.3 s
0.9688
from sklearn.decomposition import PCA
pca = PCA(0.9)
%time pca.fit(X_train)
pca.n_components_ #保留90%的信息,可以将数据从784维降到87维,降维幅度非常可观
X_train_reduction = pca.transform(X_train)
X_test_reduction = pca.transform(X_test)
knn_clf_pca = KNeighborsClassifier()
knn_clf_pca.fit(X_train_reduction, y_train)
%time knn_clf_pca.score(X_test_reduction, y_test)

结果:

CPU times: total: 16.5 s
Wall time: 6.89 s
CPU times: total: 17.7 s
Wall time: 3.17 s
0.9728