1,K-NN算法的理解:
第一,对n维未知量xεRn , 测试其label
第二,对已知训练数据y,计算x到y每个row的距离
第三,选出k个最短的距离,根据这k个训练数据label的投票,确定x的label
import numpy as np def knn_cla(train_data,train_label,test_data,k=1): '''k nearest negibor algorithm''' row_train = train_data.shape[0]#获取测试数据的维度 pred_label = list()#将要输出的label list for i,test_data in enumerate(test_data):#对个test item dis=[] for train_item in train_data: dis.append(distance.euclidean(test_item,train_item))#计算此text item到每个train exaple的欧几里得距离 nearest_ind = range(row_train)#产生0-rows的数据 sorted(nearest_ind,key=lambda x:dis[x])#对dis列表进行排序,最终结果保存到nearest_ind nearest_label = [train_label[nearest_ind[x]] for x in range(k)]#将前k个最短距离的label加入到list当中 pred_label.append(Counter(nearest_label).most_common()[0][0])#投票选取最普遍的label return np.array(pred_label)