统计学习方法学习笔记第三章(k邻近算法)
给定一个训练集,假设实例的类别已定,给定一个新的实例,根据离其最近的k个实例的类别,通过多数表决的方式来确定新实例的类别。
k邻近模型:
在k邻近算法中,当训练集,距离度量,k值以及决策规则(如欧式距离)确定后,对于任意一个新输入的实例,它所属的类是唯一确定的。
距离度量:主要有三种度量方法(参考第一第二范式的定义)
当p=1时,为曼哈顿距离
当p=2时,为欧几里得距离
当p趋向于无穷时,距离为各个坐标中的最大值。
k值的选择:
k值较小: 近似误差会减小,估计误差会变大,整体模型变复杂,容易发生过拟合
k值较大: 估计误差减小,近似误差变大,整体模型变简单
k=n时(n为实例数),模型过于简单,完全忽略了有用信息,不可取
实际应用中k一般较小,通常采用交叉验证的方法来选取最优的k值
分类决策规则:
损失函数为0-1损失函数,采用多数表决方法等价于经验风险最小化。
k邻近算法的实现:kd树
构造:从第一维依次增加维数不断循环(设当前在第i维),将以第i维的坐标为基准,中位数的点作为划分,将点集分为左右两部分,在左右两部分再继续递归划分。
查找(假设查找最近的k个),首先需要找到查询点所处的区域,维护一个最近k个点的序列,以第k远的点到目标点的距离作为半径做圆。从叶节点回溯,如果该节点的父节点的另一个孩子节点所代表的的矩形区域和圆有交点,说明这个孩子节点内部可能会有可以更新的点,就进去搜索,否则就继续用回溯。
当点是随机分布的时候,搜索的时间复杂度接近O(logn),如果维数接近样本数,将退化为接近线性搜索。