编程语言
首页 > 编程语言> > Python机器学习:PCA与梯度上升:007试手MNIST数据集

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