原理是根据未知分类的点到已知分类点的集合的距离最近,近朱者赤近墨者原理
import numpy as np##最近邻代码class NearestNeighbor: def __init__(who): pass ##不知道写一些啥,但是为了避免语法错误,就用pass代替 def traim(self,X,y): self.Xtr=X##点集合 self.ytr=y###分类标签 def predict(self,X): num_test=X.shape[0] ##获取的是多少个数据 Ypred=np.zeros(num_test,dtype = self.ytr.dtype) print("Ypred:",Ypred) for i in range(num_test): ###求行相减然后求和 distances=np.sum(np.abs(self.Xtr - X[i,:]),axis=1) ##X[i,:等同于X[i] print("distances:",distances) ###求里面的最小值的下标 min_index=np.argmin(distances) print("min_index:",min_index) Ypred[i] = self.ytr[min_index]##[0,0] return Ypredclass tjn: nbor=NearestNeighbor(); X=[[-1,2],[1,3],[2,4],[3,6],[2,7],[3,8],[4,9],[4,10]] ##X是已知的分类集合 labels = ['A','B','B','B','A','B','B','A']##labels是X里面点集合对应的标签 nbor.traim(np.array(X),np.array(labels)) Z = [[0, 2], [0, 3], [1, 3], [6, 3]]##现在有一批未知分类的集合 mm=nbor.predict(np.array(Z))##打印出未知分类集合的大概所属类型 print(mm)