K近邻法
详见《统计学习》P53页。
代码收藏90Zeng的博客Kd树的c++实现。
在利用kd树搜索最邻近点的时候有一句话:
当前最近点一定存在于该结点一个子结点对应的区域,检查子结点的父结点的另一子结点对应的区域是否有更近的点。具体做法是,检查另一子结点对应的区域是否以目标点位球心,以目标点与“当前最近点”间的距离为半径的圆或超球体相交:
如果相交,可能在另一个子结点对应的区域内存在距目标点更近的点,移动到另一个子结点,接着,继续递归地进行最近邻搜索;如果不相交,向上回溯。
从书中的图来看当然是容易的,问题是如何利用树的结构去实现检查另一子结点对应的区域是否以目标点位球心,以目标点与“当前最近点”间的距离为半径的圆或超球体相交?
目前的理解:
具体简单实现的时候是先检查父节点与其距离,如果小于就可以检查其父节点内部其他同胞节点区域内的点。(如果与父节点直接距离已经很大,通常不可能与其内部另外一个区域某一个点距离反而更小)