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树

待补充

你可能感兴趣的:(机器学习)