0.前言
本次还是利用《hands_on_ML_with_Sklearn_and_TF》这本书的内容进行学习,以前学习了数据的处理(测试集的划分以及数据预处理),这次我们将重心放到机器学习的一个重点——分类问题,本次使用的数据集是比较经典的mnist数据集。它有着 70000 张规格较小的手写数字图片,由美国的高中生和美国人口调查局的职员手写而成。这相当于机器学习当中的“Hello World”,人们无论什么时候提出一个新的分类算法,都想知道该算法在这个数据集上的表现如何。机器学习的初学者迟早也会处理 MNIST 这个数据集。接下来就是进行数据集的读取工作。
1.数据集的提取
数据集的提取是机器学习的基础工作,对于mnist有很多获取方法,这次我们介绍一种利用scipy.io进行提取。我们首先要下载mnist_all.mat文件放在路径下。如图所示:
最后调用下面的代码你将得到上图中mnist-original.mat的结果。
import scipy.io as sio
mat_path = os.path.join('mldata', 'mnist-original.mat')
mnist = sio.loadmat(mat_path)
注意一定要下载mnist_all.mat这个文件不然读取不了。
对于我们已经获取的mnist数据,其数据格式:
{'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Sun May 6 12:33:08 2018', '__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”这两个数据名进行访问,比如:
x, y = mnist["data"].T, mnist["label"].T
另外我们进行训练集与测试集的划分,其实可以使用sklearn中的内置函数进行划分,但现在我们使用原始的方法进行数据划分:
x_train, x_test, y_train, y_test = x[:60000], x[60000:], y[:60000], y[60000:]
shuffle_index = np.random.permutation(60000) # permutation函数是用来打乱数据顺序的函数
x_train, y_train = x_train[shuffle_index], y_train[shuffle_index]
这样我们得到了数据与标签,接下来我们要进行分类处理,我们将分类分为二分类与多分类。
2.二分类
2.1构建二分类数据
我们首先将标签进行