sklearn机器学习之分类问题(使用mnist作为数据集)

本文通过《hands_on_ML_with_Sklearn_and_TF》学习,使用scipy.io提取mnist数据集,讲解了二分类与多分类的方法。在二分类中,使用SGDClassifier,而在多分类中,sklearn会自动执行OvA或OvO策略。此外,还介绍了多标签分类的概念。
摘要由CSDN通过智能技术生成

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构建二分类数据

我们首先将标签进行

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值