问题描述
我正在尝试手动编码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 (将#修改为@)