def KNN(train_data, train_label, test_data, k):
distance = []
for i in train_data:
dis = ((i[0]-test_data[0])**2 + (i[1]-test_data[1])**2)**0.5 #距离计算
distance.append(dis)
dis_index = np.array(distance).argsort() #数组值从小到大的索引值
class_count = {}
for i in range(k): #获取前k个值的label和计数
l = train_label[dis_index[i]]
class_count[l] = class_count.get(l, 0)+1 #get函数表示,如果l不存在值,则得到0,否则得到l的值+1
sort_class = sorted(class_count.items(), key=operator.itemgetter(1), reverse=True) #获取得到class_count计数从大到小的排序
return sort_class[0][0]
data = [[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]
label = ['A', 'A', 'B', 'B']
KNN(data, label, x, 3)
Simple_KNN
最新推荐文章于 2025-06-17 10:56:24 发布