分类问题(一)MINST数据集与二元分类器

分类问题

在机器学习中,主要有两大类问题,分别是分类和回归。下面我们先主讲分类问题。

MINST

这里我们会用MINST数据集,也就是众所周知的手写数字集,机器学习中的 Hello World。sk-learn 提供了用于直接下载此数据集的方法:

from sklearn.datasets import fetch_openml

minst = fetch_openml(‘mnist_784‘, version=1)
minst.keys()
>dict_keys([‘data‘, ‘target‘, ‘feature_names‘, ‘DESCR‘, ‘details‘, ‘categories‘, ‘url‘])

像这种sk-learn 下载的数据集,一般都有相似的字典结构,包括:

  • DESCR:描述数据集
  • data:包含一个数组,每行是一条数据,每列是一个特征
  • target:包含一个数组,为label值

我们看一下这些数组:

X,y = minst[‘data‘],minst[‘target‘]
X.shape, y.shape
>((70000, 784), (70000,))

可以看到一共有 70000 张图片,每张图片包含784个特征。这是因为每张图包含28×28像素点,每个特征代表的是此像素点强度,取值范围从0(白)到255(黑)。我们先看一下其中一条数据。首先获取一条数据的特征向量,然后reshape到一个28×28 的数组,最后用matplotlib 的imshow() 方法显示即可:

import matplotlib as mpl
import matplotlib.pyplot as plt

some_digit = X[0]
some_digit_image = some_digit.reshape(28, 28)

plt.imshow(some_digit_image, cmap = mpl.cm.binary, interpolation="nearest")
plt.axis("off")
plt.show()

从图片来看,这个应该是数字5,我们可以通过label 进行验证:

y[0]
>‘5‘

可以看到这个label的数值是 string,我们需要将它们转换成int:

import numpy as np

y = y.astype(np.uint8)
>array([5, 0, 4, ..., 4, 5, 6], dtype=uint8)

现在,我们初步了解了数据集。在训练之前,必须要将数据集分为训练集与测试集。这个MINST数据集已经做好了划分,前60000 为训练接,后10000为测试集,直接取用即可:

X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]

这个训练集已经做过了shuffle,基本可以确保k-折交叉验证的各个集合基本相似(例如不会出现某个折中缺失一些数字)。另一方面,有些学习算法对于训练数据的顺序比较敏感,所以对数据集进行shuffle的好处是避免数据的顺序对训练造成的影响。

训练二元分类器

我们先简化此问题,仅让我们的模型判断一个数字,例如5。这样的分类器称为二元分类器,仅能将数据分为两个类别:数字5和非数字5。下面我们为这类分类器创建label:

y_train_5 = (y_train == 5)
y_test_5 = (y_test == 5)

现在我们选择一个分类器并进行训练,可以先从一个随机梯度下降(Stochastic Gradient Descent,SGD) 分类器开始,使用sk-learn的SGDClassifer 类。这个分类器的优点是:能够高效地处理非常大的数据集。因为它每次均仅处理一条数据(也正因如此,SGD非常适合online learning 场景)。下面创建一个SGDClassifer 并在整个训练集上进行训练:

from sklearn.linear_model import SGDClassifier

sgd_clf = SGDClassifier(random_state=42)
sgd_clf.fit(X_train, y_train_5)

SGDClassifier在训练时会随机选择数据,如果要复现结果的话,则需要手动设置random_state 参数。现在我们可以使用已训练好的模型进行预测一个手写数字是否是5:

sgd_clf.predict([X_test[0], X_test[1], X_test[2]])
>array([False, False, False])

看起来结果还不错,我们稍后评估一下这个模型的性能。

原文地址:https://www.cnblogs.com/zackstang/p/12316640.html

时间: 2024-10-11 05:50:16

分类问题(一)MINST数据集与二元分类器的相关文章

在kyphosis数据集建立支持向量机分类器

1.  e1701简介 R语言的e1071包提供了对libsvm的接口.库libsvm包括了常用的核,如线性,多项式,RBF,sigmoid等.多分类通过一对一的投票机制(one-against-one voting scheme)而实现.predict()是训练函数,plot()可视化数据,支持向量,决策边界(如果提供的话).参数调整tune(). 用e1071包中svm函数可以得到与libsvm相同的结果.write.svm()更是可以把R训练得到的结果写为标准的Libsvm格式,以供其他环

文本分类之情感分析 – 朴素贝叶斯分类器

情感分析正成为研究和社交媒体分析的热点领域,尤其是在用户评论和微博上.它是文本挖掘的一种特殊情况,一般关注在识别正反观点上,虽然它常不很准确,它仍然是有用的.为简单起见(因为训练数据容易获取),我将重点放在2个可能的情感分类:积极的和消极的. NLTK 朴素贝叶斯分类 NLTK附带了所有你需要的情感分析的入手的东西:一份带有分为POS和NEG类别的电影评论语料,以及一些可训练分类器.我们先从一个简单的NaiveBayesClassifier作为基准,用布尔特征提取. 词袋特征提取 所有NLTK分

机器学习评价指标 本文针对二元分类器

机器学习:准确率(Precision).召回率(Recall).F值(F-Measure).ROC曲线.PR曲线 在介绍指标前必须先了解"混淆矩阵": 混淆矩阵 True Positive(真正,TP):将正类预测为正类数,是正的,也预测正的 True Negative(真负,TN):将负类预测为负类数,是负的,也预测负的 False Positive(假正,FP):将负类预测为正类数误报 (Type I error),是负的,预测为正的 False Negative(假负,FN):将

python感知机分类乳腺癌数据集

一.感知机介绍 感知器(英语:Perceptron)是Frank Rosenblatt在1957年就职于康奈尔航空实验室(Cornell Aeronautical Laboratory)时所发明的一种人工神经网络.它可以被视为一种最简单形式的前馈神经网络,是一种二元线性分类器.Frank Rosenblatt给出了相应的感知机学习算法,常用的有感知机学习.最小二乘法和梯度下降法.譬如,感知机利用梯度下降法对损失函数进行极小化,求出可将训练数据进行线性划分的分离超平面,从而求得感知机模型.感知机是

sklearn数据集

sklearn 的数据集有好多个种 自带的小数据集(packaged dataset):sklearn.datasets.load_<name> 可在线下载的数据集(Downloaded Dataset):sklearn.datasets.fetch_<name> 计算机生成的数据集(Generated Dataset):sklearn.datasets.make_<name> svmlight/libsvm格式的数据集:sklearn.datasets.load_sv

SVM入门(三)线性分类器Part 2

上回说到对于文本分类这样的不适定问题(有一个以上解的问题称为不适定问题),需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标.    在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成.如下:Di=(xi,yi).xi就是文本向量(维数很高),yi就是分类标记.    在二元的线性分类中,这个表示分类的标记只有两个值,1和-1(用来表

《数据挖掘导论》 - 读书笔记(5) - 分类:基本概念、决策树与模型评估 [2016-8-21]

第4章 分类:基本概念.决策树与模型评估 分类任务就是确定对象属于哪个预定义的目标类.分类问题是一个普遍存在的问题,有许多不同的应用.例如:根据电子邮件的标题和内容检查出垃圾邮件,根据核磁共振扫描的结果区分肿瘤是恶性的还是良性的,根据星系的形状对它们进行分析. 本章介绍分类的基本概念,讨论诸如模型的过分拟合等关键问题,并提供评估和比较分类技术性能的方法.尽管本章主要关注一种称作决策树归纳的技术,但是本章讨论的大部分内容也适用于其他的分类技术. 4.1 预备知识 分类任务的输入数据是记录的集合.每

cs231n笔记 (一) 线性分类器

线性分类器用作图像分类主要有两部分组成:一个是假设函数, 它是原始图像数据到类别的映射.另一个是损失函数,该方法可转化为一个最优化问题,在最优化过程中,将通过更新假设函数的参数值来最小化损失函数值. 从图像到标签分值的参数化映射 该方法的第一部分就是定义一个评分函数,这个函数将图像的像素值映射为各个分类类别的得分,得分高低代表图像属于该类别的可能性高低.下面会利用一个具体例子来展示该方法.现在假设有一个包含很多图像的训练集 $x_i \in \mathbb{R}^D$,每个图像都有一个对应的分类

汽车分类预测——多元分类

Dataset 本文的数据集包含了各种与汽车相关的信息,如点击的位移,汽车的重量,汽车的加速度等等信息,我们将通过这些信息来预测汽车的来源:北美,欧洲或者亚洲,这个问题中类标签有三个,不同于之前的二元分类问题. 由于这个数据集不是csv文件,而是txt文件,并且每一列的没有像csv文件那样有一个行列索引(不包含在数据本身里面),而txt文件只是数据.因此采用一个通用的方法read_table()来读取txt文件: mpg – Miles per gallon, Continuous. cylin