k近邻 是一种快速分类方法,没有显式的学习过程
其思想类似于俗语”物以类聚,人以群分“,想知道一个人如何,那么可以从他经常打交道的人群间接得知。
k近邻分类也是这样:
在NLP中计算词向量时候,也有一个分布式假设:一个词的意思可以由它周边的词表示,与KNN 可以说是有异曲同工之妙
a word is characterized by the company it keeps"
为了提高搜索效率(避免O(N)),knn 在实现上,一般用kd树来实现
kd 树
kd 树 是二叉树
注意,k是维度的意思
提到快速搜索,在一维时候,可以使用BST二分查找树,但是由于训练语料数据一般维度>1,所以要引入kd tree
搜索最近邻
图解如下:
先找到最接近的叶子节点,然后回溯更新;并且,只要与节点的超平面相交,就要进入另一个分支节点判断
疑问
上面 只是返回单一的最近邻,如何返回 前top K结果呢??