3.1 k 近邻算法
K近邻算法即是对与每一个需要分类的新实例,找出数据集中与它最相似的k个实例,并选取占大多数的分类作为新实例的分类。
3.2 k 邻近模型
其模型主要由3个部分组成:距离的度量、
k
值的选择以及分类决策规则的制定。
(1)距离度量:一般选择实例特征的范数。
(2)
(3)分类决策规则:其本质是经验损失最小:
其中, N 是邻近的
3.3 k近邻的实现:kd树
kd树是一种快速寻找最邻近节点的算法,该算法分成两步,首先建立kd树,然后根据kd树快速搜寻最邻近节点。kd树的构造过程是把特征空间划分成超矩形的过程。
3.3.1 构造kd树
(1)从第一个开始轮流选取特征分量,找出所有数据中该特征分量的中间值,并且将该数据作为根节点,以该分量垂直于坐标系的超平面划分特征空间,其他节点中特征分量小于中值的在左空间,大于的在右空间。
(2)依次选取下一个特征分量,在左边以及右边的子空间中分别重复第一步,到只剩根节点为止。可以知道,kd树是一个平衡二叉树。
3.3.2 搜索kd树
(1)从根节点开始,按照特征分量的划分依次往下搜索,直到找到叶节点,并认为这个叶节点是“当前最邻近节点”,输入实例与最邻近节点之间的距离即搜索半径。
可以认为整个空间中与实例最相邻的节点一定在以搜索半径为半径的这个超球中。所以剩下要做的事就是在所有与超球相交的特征子空间中进行搜索,找出搜索半径最小的节点。
(2)进行回溯直到根节点,对于回溯的每一个节点作如下检查:
a:这个节点是否比当前最邻近节点更近,如果更近就替换掉它。
b:这个节点的另一个子空间是否与超球相交,如果相交,递归搜索该子空间中与超球相交的子空间,对搜索路径上的节点进行比较,搜索完毕后继续回溯。
3.4 其他
该算法的时间复杂度是 O(logn) ,但如果节点的数量与特征空间分量的数量相同,则退化到 O(n) ,相当于线性搜索。所以数据越多其高速的特征越明显。