k近邻法

K近邻法的算法:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例的多数属于某个类,就把该输入实例分为这个类。

K近邻法的特殊情况是k=1的情形,称为最近邻算法。

K近邻法中,当训练集、距离度量、k值以及分类决策规则确定后,对于任何一个新的输入实例,它所属的类唯一地确定。

  • 距离度量:使用的距离可以是欧氏距离,可以是Lp距离
                                                                                            

(p=2时是欧氏距离,p=1时是曼哈顿距离,p=无穷时是各个坐标距离的最大值)

  •   K值的选择:

如果选择较小的k值,就相当于用较小的领域中的训练实例进行预测。优点:“学习”的近似误差会减小,只有与输入实例较近的训练实例才会对预测结果起作用。缺点:“学习”的估计误差会增大,预测结果对近邻的实例点非常敏感,如果邻近的实例点恰巧是噪声,预测就会出错。K值的减小意味着整体模型变复杂,容易发生过拟合。

如果选择较大的k值,就相当于用较大的邻域中的训练实例进行预测。优点:可以减少学习的估计误差,缺点是近似误差会增大。与输入实例较远的训练实例也会对预测起作用,使预测发生错误。K值的增大意味着整体的模型变得简单。

一般k值取一个较小的值。

  • 分类决策:往往是多数表决。

K近邻法的实现:kd树

构造kd树:

Kd树是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。Kd树是二叉树,表示对k维空间的一个划分。构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。Kd树的每个结点对应于一个k维超矩形区域。

构造kd树的方法:构造根结点,使根节点对应于k维空间中包含所有实例点的超矩形区域;通过下面的递归方法,不断地对k维空间进行划分,生成子结点。在超矩形区域上选择一个坐标轴和在此坐标轴上的一个切分点,确定一个超平面,这个超平面通过选定的切分点并垂直于选定的坐标轴,将当前超矩形区域切分为左右两个子区域;这个过程直到子区域内没有实例时终止。通常,一次选择坐标轴对空间切分,选择训练实例点在选定坐标轴上的中位数为切分点,这样得到的kd树是平衡的。

搜索kd树:

以最近邻为例叙述

首先找到包含目标点的叶结点;然后从该叶结点出发,依次回退到父结点;不断查找与目标点最邻近的结点,当确定不可能存在更近的结点时终止。包含目标点的叶结点对应包含目标点的最小超矩形区域。以此叶结点的实例点作为当前最近点。目标点的最近邻一定在以目标点为中心并通过当前最近点的超球体的内部。然后返回当前结点的父结点,如果父结点的另一子结点的超矩形区域与超球体相交,那么在相交的区域内寻找与目标点更近的实例点。如果存在这样的点,将此点作为新的当前最近点。算法转到更上一级的父结点,继续上述过程。如果父结点的另一个子结点的超矩形区域与超球体不想交,或不存在比当前最近点更近的点,则停止搜索。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值