暴力手动 Numpy KNearestNeighbor 实现 及结果验证

机器学习之K近邻算法 —— 部分实现
只对 Python 机器学习库里 sklearn.neighbors.NearestNeighbors 做一个非常简单的 手写实现。
代码如下:

from sklearn.neighbors import NearestNeighbors
import numpy as np


#随机创建 训练数据X和测试样本Y 数量和维度可以做任意修改
X=np.random.rand(20,5)
Y=np.random.rand(5,5)

#Step1 完成库中knn
Apiknn = NearestNeighbors(n_neighbors=10)
Apiknn.fit(X)
dist , indices = Apiknn.kneighbors(Y, return_distance=True)
print('自带库中函数结果\n',indices,'\n',dist)

#Step 2 完成手写部分
def knn(trainD,testD,K):
    N1 , D = X.shape
    N2 = Y.shape[0]
    indices= -np.ones((N2 , K))
    dist = -np.ones((N2, K))
    for i in range (N2):
            alldist=np.sqrt(np.sum((X-Y[i])**2,1))
            for j in range (K):
                indices[i][j]=np.argmin(alldist)
                
                dist[i][j]=alldist[int(indices[i][j])]
                alldist[int(indices[i][j])]=1e30
    return indices , dist
#调用手写knn函数
indicesx, distx = knn(X,Y,10)
print('手动实现结果\n',indicesx , '\n',distx)

结果验证:在这里插入图片描述
我们可以看到结果是完全吻合的!
实现过程中遇到的问题也有很多:
在这里插入图片描述这两个问题是算法本身逻辑有错误。
在这里插入图片描述
这个问题是print 后括号打成中文了。

这个手动实现还存在一些问题如用了两次循环,语法还有点粗糙等,由于我是初学者,没有更好的思路,希望有同学或者前辈指正。
我打算之后更新一下完整的 knnclassfier 的实现!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值