更多:贝叶斯…
这一小节我们将简单的阐述一般贝叶斯分类器设计的方法。分类器流程如下所示。
- 输入:d-dim 特征向量
- 计算决策函数值(针对每个类别)
- 选取最大的值
- 做出决策
- 输出结果
如下图可以清楚的表达整个分类器工作的流程。

整个设计的流程

下面我们将以两个小例子来贯穿贝叶斯分类器设计的整个流程。
4.1 MNIST手写体识别
4.1.0 数据集简介
MNIST是一个0-9的手写数字数据库。MNIST数据集中包含60000张手写数字图片,10,000 张测试图片。每张图片的大小为28*28,包含一个手写数字。如下图所示。数据集链接:

数据集中包含四个文件。
1. train-images-idx3-ubyte.gz: training set images (9912422 bytes) 2. train-labels-idx1-ubyte.gz: training set labels (28881 bytes) 3. t10k-images-idx3-ubyte.gz: test set images (1648877 bytes) 4. t10k-labels-idx1-ubyte.gz: test set labels (4542 bytes)
整理一下MNIST数据集。
- 四个文件。train_image,train_label,test_image,test_label
- 图像数据。28*28的图像尺寸的灰度图像,所以每张图像为28*28*1
- 标签。针对每个数据给出0-9中一个数字作为类别。
4.1.1 特征向量准备
搞个三部曲:
- 数据准备
- 模型设计
- 模型训练
贝叶斯决策论也不例外,首要的,我们需要将原始数据经过一系列清洗得到输入的特征向量。
咋输入数据?
MNIST数据集四个文件是用二进制进行编写,详细的格式如下图所示,展示image file 和 label file。

数据的预处理可以分为两部分:第一部分就是读入数据,第二部分就是提取成想要的特征向量。
(1)读入数据。实验中我们采用MATLAB编写,利用文件指针逐个字节读取,得到一个mat,然后reshape到784*N的数据形式,注意这里得到的都是0-255像素。对于label也是同理得到N*1的数据形式。
(2)提取特征向量。 最后我们需要对读入的数据进行处理得到我们想要的特征向量。这里实验做法十分暴力,直接将图像变成二值化(将0-255 resize到0、1),然后向量长度不变。所以得到的形式是784*N的二值化的矩阵。Label不做任何处理。
这里主要是阐述整个设计流程,所以直接用最简单的方式提取特征。感兴趣的同学可以尝试用PCA等特征生成的方式将输入的图像做特征提取。