KNN K近邻算法

57 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

考试要求:

距离的概念,Lp范数(包含的三种距离)。
对K近邻法的理解,K值得选取会影响分类的结果。
kd树的构造与搜索。(参考习题3.2)

KNN原理

存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每个数据与所属分类的对应关系。

输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。

一般来说,只选择样本数据集中前N个最相似的数据。K一般不大于20,最后,选择k个中出现次数最多的分类,作为新数据的分类

距离

距离度量:特征空间中两个实例点的距离时两个实例点相似程度的反映。

Lp距离(闵可夫斯基距离):

Pasted image 20221129161743.png

三个距离

欧氏距离(p=2):

Pasted image 20221129161941.png

曼哈顿距离(p=1):

Pasted image 20221129162000.png

L∞距离(p=∞),它是各个坐标距离的最大值:

Pasted image 20221129162031.png

K值的选择

K值较小

学习的近似误差会减小,但学习的估计误差会增大,预测结果会对近邻的实例点非常敏感,如果近邻噪声,则会出错

K值的减小就意味着整体模型变得复杂,容易发生过拟合。

近似误差:可以理解为对现有训练集的训练误差。 估计误差:可以理解为对测试集的测试误差。

K值较大

学习的估计误差减小,但学习的近似误差会增大

K值的增大意味着整体的模型变得简单

KD树

构造KD树

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

通常,依次选择坐标轴对空间切分,选择训练实例点在选定坐标轴上的中位数(median)为切分点,这样得到的kd树是平衡的。

例题: 选择7个点的x轴的中点为7,则以x=7划分左右两支。在7的左支,找到y轴的中点为y=4划分上下两个矩形;右支,找到y轴的中点6,以y=6划分。

Pasted image 20221129163806.png

最后画出KD树

Pasted image 20221129164515.png

搜索KD树

给定一个目标点,搜索其最近邻。

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

例题:

Pasted image 20221129165521.png

Pasted image 20221129170043.png

Pasted image 20221129170058.png