k-nn算法

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)

 

posted @ 2021-05-26 21:46  dream_fu  阅读(148)  评论(0编辑  收藏  举报