KNN(K-Nearest-Neighbor) 是分类算法中比较简单的一个算法。算法思想非常简单:对于一个未知类别的样例,我们在很多已知类别的样本中找出跟它最相近的K个样本,赋予该样例这K个样本中占多数的类别。
如图中所示,如果我们选取K值为3,则将样本分类为三角形的类别。而如果K为5,则将样本分类为正方形的类别。这里也可以看出K值的选取很关键。
这里呢,我将用KNN做手写体数字的识别。另人惊异的是,用如此简单的算法也可以获得超过94%的识别准确率。
首先我先介绍一下我用的数据集MNIST,我有的是10500条已经标好类别的样本,我用其中500条做测试样例,用剩下10000条做训练集。其中每一个样本784 位0、1 加上一位类别组成,784位0/1 可以组成28*28的二值图。