机器学习11-KNN-python

1. 原理

不需要训练,只需要简单的计算需要预测的数据与已知的数据的欧式距离,取最近的k个样本,投票决定属于哪个类别

2. python实现

def knn_clf(dataSet, target, pred, k):
    # 计算预测到每个样本的距离
    diff = dataSet - pred
    distance = np.sum(diff ** 2, axis=1) ** 0.5
    # 对距离排序
    sortedindex = np.argsort(distance)
    
    # 统计最近k个的类别,投票决定什么类别
    clfcount = {}
    for i in range(k):
        lable = target[sortedindex[i]]
        if  lable not in clfcount.keys():
            clfcount[lable] = 0
        else:
            clfcount[lable] += 1
    # 字典组成元组,对第二个元素排序,逆序输出
    sortdict = sorted(clfcount.items(), key=lambda item: item[1], reverse=True)
    return sortdict[0][0]

3. kd-tree加快搜索

点赞