一、原理
看最靠近自身的k个是什么,那自己就是什么。
属于消极分类,不需要训练模型
需要计算全局距离,当samples很大时很难使用(当然可以抽样)
二、代码
import numpy as np from sklearn.datasets import load_iris import distance as d iris = load_iris() data = iris.data # 。shape=(150,4) target = iris.target def max_word(lt): d = {} max_key = None for w in lt: if w not in d: count = lt.count(w) d[w] = count if d.get(max_key, 0) < count: max_key = w return max_key def kNN(testdata, dataSet, labels, k): # 第一步,测定距离列表、 disArray = np.zeros(dataSet[:, 0].shape) for i in range(len(dataSet)): disArray[i] = d.euclidean(testdata, dataSet[i]) # 第二步,联合labels取最小的k个 dis_labels = list(zip(disArray, labels)) dis_labels = sorted(dis_labels, key=lambda x: x[0]) # 排序 for i in range(len(dis_labels)): dis