KNN复杂度分析及KD树

1 复杂度

复杂度一般分为两种,时间复杂度空间复杂度。这里的时间复杂度指的是程序运行时花费的时间,空间复杂度指的是内存消耗的大小。
1.KNN在搜索阶段的时间复杂度是多少?
我们都知道KNN在训练阶段不参与任何实质性的模型训练,但在测试阶段需要跟每一个样本做距离的计算。数据量少的时候倒没有关系,但一旦数据量很大时就成为一个瓶颈。
2.假如有N个样本,而且每个样本的特征为D维的向量。那对于一个目标样本的预测,需要的时间复杂度是多少?
首先对于任何一个目标样本,为了做预测需要循环所有的训练样本,这个复杂度为O(N)。另外,当我们计算两个样本之间距离的时候,这个复杂度就依赖于样本的特征维度,复杂度为O(D)。把循环样本的过程看做是外层循环,计算样本之间距离看作是内层循环,所以总的复杂度为它俩的乘积,也就是O(N*D)。
3.有没有办法提升KNN搜索的效率?
第一、时间复杂度高的根源在于样本数量太多。所以,一种可取的方法是从每一个类别里选出具有代表性的样本。
3.1 如何选择这些具有代表性的样本呢?
其中一个简单的方法是,对于每一个类的样本做聚类,从而选出具有一定代表性的样本。
第二、可以使用近似KNN算法。这种算法仍然是KNN,但是在搜索的过程会做一些近似运算来提升效率,但同时也会牺牲一些准确率。
第三、使用KD树来加速搜索速度,但一般只适合用在低维的空间。

2 KD树

待补充

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值