声明:本文的代码部分可以戳这里下载~
一、MNIST数据集
MNIST是深度学习的经典入门demo,他是由6万张训练图片和1万张测试图片构成的,每张图片都是28*28大小(如下图),而且都是黑白色构成(这里的黑色是一个0-1的浮点数,黑色越深表示数值越靠近1),这些图片是采集的不同的人手写从0到9的数字。TensorFlow将这个数据集和相关操作封装到了库中。
上图就是4张MNIST图片。这些图片并不是传统意义上的png或者jpg格式的图片,因为png或者jpg的图片格式,会带有很多干扰信息(如:数据块,图片头,图片尾,长度等等),这些图片会被处理成很简易的二维数组。
二、KNN算法
KNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。回到本文所述的实验中,即为在训练集中数据和标签已知的情况下,输入测试数据,通过计算训练样本和测试样本的曼哈顿距离,将测试样本的特征与训练样本中对应的特征进行比对,找到训练样本中与当前测试样本最为相似的前K个样本数据,则该测试样本对应的类别就是K个数据中出现次数最多的那个分类。算法的过程可以描述为:
1)计算测试样本与所有训练样本之间的曼哈顿距离;
2)对所求解的曼哈顿距离进行递增排序;
3)选取距离最小的K个点;