1. KNN算法
K Nearest Neighbors 可用于分类问题,就是新样本和训练集的所有样本作对比,找出与之最接近的K个样本,统计最近的k个训练样本中所属类别计数最多的那个类,就是新样本的类。
该算法简单直观,但是每次查询都需要和所有样本进行比较,代价很大。一种优化方法是基于KD树的实现。
2. KD树
KD树是一个二叉树,表示对K维空间的一个划分,它的功能就是在高维空间下进行一个快速的最近邻查询。利用KD树可省去对大部分数据点的搜索,从而减少搜索的计算量。
2.1 KD树构建
构建KD树相当于不断地用垂直于坐标轴的超平面将K维空间进行划分,构成一系列的K维超矩形区域,KD树的每一个节点对应于一个K维超矩形区域。
通常依次选择坐标轴对空间进行切分,选择训练样本在选定坐标轴上的中位数为切分点,这样得到的KD树是平衡的。但是,平衡的KD树搜索时的效率未必是最优的。也有选择
熵最大的特征值进行切分,个人感觉这里更有理由,因为熵越大,说明样本在这一维度上信息越大,切分后效果会越好。
2.2 KD树搜索
记待查询点的样本点为Q,样本点为xi,样本维度为d,即xi = {a1, a2, ..., ad}
- 首先从根节点开始递归往下找到包含Q的叶子节点,每一层都是找对应的xi;
- 将这个叶子节点认为是当前的“近似最近点”;
- 递归向上回退,如果以Q圆心,以“近似最近点”为半径的球与根节点的另一半子区域边界相交,则说明另一半子区域中存在与Q更近的点,则进入另一个子区域中查找该点并且更新”近似最近点“;
- 重复3的步骤,直到另一子区域与球体不相交或者退回根节点;
- 最后更新的”近似最近点“与q真正的

本文详细介绍了KNN算法以及KD树的构建和搜索过程。在KD树搜索中,从根节点递归找到包含目标点的叶子节点,并通过球体与子区域边界相交判断更新最近点。此外,还补充了二叉排序树和平衡二叉树的相关知识,强调了它们在查找效率上的优势。
最低0.47元/天 解锁文章
446

被折叠的 条评论
为什么被折叠?



