Python机器学习:PCA与梯度上升:007试手MNIST数据集
作者:互联网
数据集加载,本来想使用sklearn中的 fetch_openml函数直接从网站下载数据集,然而现在这条命令不行(似乎是网站问题),因此,尝试用使用本地加载首先在
链接:https://pan.baidu.com/s/163MTS_89EKpJZsO6da5J3w
提取码:it3v
复制这段内容后打开百度网盘手机App,操作更方便哦
下载MNIST文件,里面一共有7w个手写数字样本数据,每个数据有28*28=784维。
import numpy as np
from sklearn.datasets import fetch_openml#使用此命令失败
文件目录结构
下载下来的数据:mnist-original.mat
使用scipy.io 读取.mat文件
import scipy.io as sio
mnist = sio.loadmat('datasets/mnist-original.mat')
print(mnist)
{'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Sun Mar 30 03:19:02 2014', '__version__': '1.0', '__globals__': [], 'mldata_descr_ordering': array([[array(['label'], dtype='<U5'), array(['data'], dtype='<U4')]],
dtype=object), 'data': array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]], dtype=uint8), 'label': array([[0., 0., 0., ..., 9., 9., 9.]])}
字典结构
我们用的到的data,label,读取到data和label之后对其进行转置。shape[0]为样本个数70000,shape[1]为样本维度个数784
X,y = mnist['data'],mnist['label']
X = X.T
y = y.T
看看shape
print(X.shape)
print(y.shape)
ok,没什么问题
(70000, 784)
(70000, 1)
train_test_split
X_train = np.array(X[:60000],dtype=float)
y_train = np.array(y[:60000],dtype=float)
X_test = np.array(X[60000:],dtype=float)
y_test = np.array(y[60000:],dtype=float)
print(X_train.shape)
print(y_train.shape)
(60000, 784)
(60000, 1)
print(X_test.shape)
print(y_test.shape)
(10000, 784)
(10000, 1)
使用KNN方法预测
首先不进行降维,训练时主要关注模型训练时间和精度
#使用KNN
from sklearn.neighbors import KNeighborsClassifier
knn_clf = KNeighborsClassifier()
%time knn_clf.fit(X_train,y_train)
27.2S
Wall time: 27.2 s
预测时间
%time knn_clf.score(X_test,y_test)
预测时间
Wall time: 11min 5s
预测精度
0.9688
然后对28*28数据进行降维
希望保持0.9的信息量
#使用PCA进行降维
from sklearn.decomposition import PCA
pca = PCA(0.9)
pca.fit(X_train)
X_train_reduction = pca.transform(X_train)
看看降维后的样本维度,87维,却保留了0.9的信息量
print(X_train_reduction.shape)
(60000, 87)
此时,使用降维后的数据训练分类器
knn_clf = KNeighborsClassifier()
%time knn_clf.fit(X_train_reduction,y_train)
用时1.42S
Wall time: 1.45 s
降维后的测试数据
X_test_reduction = pca.transform(X_test)
看看预测时花费的时间,和预测精度
%time knn_clf.score(X_test_reduction,y_test)#准确率还提高了。。(降噪)
时间减少是在意料之中,精度从0.9688上升到0.9728,信息量不是损失了吗?为什么预测精度却上升了?
PCA还有另一种作用:降噪!…
Wall time: 1min 2s
0.9728
标签:60000,Python,print,shape,train,007,试手,time,test 来源: https://blog.csdn.net/weixin_46815330/article/details/110821955