Python实现KNN方法

问题描述

我正在尝试手动编码KNN分类方法。我定义了两个函数一个函数是计算欧式距离,另一个函数是对给定样本进行分类。这是代码

def distance(train,test,i):
    dis=np.array([])
    for k in range(train.shape[0]):
        e_dis = np.linalg.norm(train[k]-test[i])
        dis = np.append(dis,e_dis)
    dis=np.argsort(dis)
    return dis
def predict(label_set,dis,k):
    unique,counts=np.unique(label_set[dis[:k]],return_counts=True)
    index=np.argsort(counts)
    predict=unique[index[-1]]
    return predict

现在,我尝试定义真正的KNN函数,使用for循环将两者结合在一起,以从测试数据集中获取每个给定样本的预测。

def knn(train,label_set,k):
    prediction=np.array([])
    for i in range (test.shape[0]):
        dis=distance(train,i)
        pred=predict(label_set,k)
        prediction=np.append(prediction,pred)
    return prediction

以下是我尝试运行代码内容。设置k = 10可以找到10个最近的邻居进行分类

b=knn(ftrain_set,ftest_set,ltrain_set,10)

当我测试它们时,距离和预测功能可以正常工作。当我测试knn函数时,需要很长时间才能运行它。我知道我的knn函数取O(n k logn),其中n,k是训练和测试集的样本量。

现在我正在寻找减少时间复杂度的方法,因此我可以计算每个k的精度,然后绘制研究曲线以找到最佳的k参数。谁能帮助我减少knn函数的时间复杂度?预先谢谢你!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)