1. 原理
不需要训练,只需要简单的计算需要预测的数据与已知的数据的欧式距离,取最近的k个样本,投票决定属于哪个类别
2. python实现
def knn_clf(dataSet, target, pred, k):
# 计算预测到每个样本的距离
diff = dataSet - pred
distance = np.sum(diff ** 2, axis=1) ** 0.5
# 对距离排序
sortedindex = np.argsort(distance)
# 统计最近k个的类别,投票决定什么类别
clfcount = {}
for i in range(k):
lable = target[sortedindex[i]]
if lable not in clfcount.keys():
clfcount[lable] = 0
else:
clfcount[lable] += 1
# 字典组成元组,对第二个元素排序,逆序输出
sortdict = sorted(clfcount.items(), key=lambda item: item[1], reverse=True)
return sortdict[0][0]