KNN(k-nearest neighbors)是一种监督学习的分类器,计算样本与所有数据的欧几里得距离,后枚举出k个距离最小的样本labels,从这k个样本中对labels进行投票,从中选择出最多票数的label作为result输出。
KNN模型中本身是没有参数的,不像CNN和RNN这样的神经网络模型存在大量的可学习的参数,所以KNN是不需要训练的。模型本身通过计算数据的距离来进行分类。
参考machine learning in action, 文中利用的数据可以在这本书的资源中找到,也可以去github上直接下载手写数字的image
程序如下:
import numpy as np
import operator
import os
import cv2
def classfier0(traindata, labels, data, k):
datasize = traindata.shape[0]
diff = np.tile(data, (datasize, 1)) - traindata
distance = ((diff ** 2).sum(axis=1)) ** 0.5
sortedDist = distance.argsort()
classCount = {
}
for i in range(k):
votedLabel = labels[sortedDist[<