import numpy as np class kNN: def __init__(self): pass def fit(self, x_train, y_train): self.xtr = x_train self.ytr = y_train def predict(self, k, dis, x_test): assert dis == 'E' or dis == 'M' num_test = x_test.shape[0] # 测试样本数量 labelist = [] # 使用欧式距离公式做为距离数量 if dis == 'E': for i in range(num_test): distances = np.sqrt(np.sum(((self.xtr - np.tile(x_test[i], (self.xtr.shape[0], 1))) ** 2), axis=1)) nearest_k = np.argsort(distances) # 根据下标排序 topK = nearest_k[:k] # 按照K值进行切片 classCount = {} # 创建一个空字典 for i in topK: classCount[self.ytr[i]] = classCount.get(self.ytr[i], 0) + 1 sortclassCount = sorted(classCount.items(), key=operator.itemgetter(1)) labelist.append(sortclassCount) return np.array(labelist) # 使用曼哈顿公式作为距离公式 if dis == 'M': for i in range(num_test): # 行相加 distances = np.sum(np.abs(self.xtr - np.tile(x_test[i], (self.xtr.shape[:0], 1))), axis=1) nearest_k = np.argsort(distances) topK = nearest_k[:k] classCount = {} for i in topK: classCount[self.ytr[i]] = classCount.get(self.ytr[i], 0) + 1 sortedclassCount = sorted(classCount.items(), key= operatory.itemgetter(1)) labelist.append(sortedclassCount[0][0]) return np.array(labelist)
深度学习kNN算法
最新推荐文章于 2022-11-08 19:37:40 发布