K近邻作为基本的分类和回归方法。在分类中,对新的实例,根据k个最近邻得训练实例的类别,通过多数表决进行预测。
一、算法
输入:,为实例的特征向量,为实例的类别。
输出:实例的的所属的类y。
(1)根据给定距离度量,在训练集中找出与最近邻的k个点,涵盖这k个点的x的领域记作。
(2)在 根据分类决策规则(类似多数投票)决定x属于哪一类。
二、相关概念
值得一提的是关于距离度量的几个概念。
距离通式:
欧式距离,p=2,即
曼哈顿距离,p=1,即
各个坐标距离的最大值,,即
下图直观展示了三种不同度量方式在表示到原点距离是1的点画出的图像:
三、kd树
KNN在对数据进行k近邻搜索的时候,有时因为数据量较大,搜索开销是个值得思考的问题。于是,kd树的思想应运而生。实际上,kd树是二叉树,是考虑将k维空间实例点进行存储和便于快速检索的树形数据结构。
算法
输入:k维空间数据集
输出:kd树
(1)构造根节点,包含T的k维空间的超矩形区域。
(2)选择的坐标轴,以T中的所有实例的坐标的中位数作为切分点,通过切分点并于坐标轴垂直作超平面,将超矩形区域分成两个子区域。以此生成深度为1的左右两个结点,左结点表示小于切分点的子区域,右结点表示大于切分点的子区域。
(3)重复(2)操作,直至两个子区域没有实例存在为止。
可以借用《统计学习》有道例题理解:
kd树最近邻搜索算法
输入:已构造好kd树,目标点为.
输出:的最近邻点.
(1)递归搜索包含目标结点的叶结点。
(2)设叶结点为最近点。
(3)递归回退,对于每个结点如果比当前最近点距离更小,则以该点为最近点。对于每个结点的兄弟结点也要进行遍历,判断是否更新最近点。
(4)当回退到根结点,搜索结束。最后的最近点即为所求。