k近邻法
给定一个训练数据集,对新的输入实例,在训练数据集中找到跟它最近的k个实例,根据这k个实例的类判断它自己的类(一般采用多数表决的方法)。
k近邻模型
模型由三个基本要素——距离度量、k值的选择和分类决策规则决定。
距离度量
特征空间中两个实例点的距离是两个实例点相似程度的反映。一般使用欧氏距离,但也可以是 Lp距离(Lp distance)或 Minkowski距离(Minkowski distance)。
xi,xj的Lp距离定义为:
这里p≥1。当p=2时,称为欧氏距离(Euclidean distance),即:
当p=1时,称为曼哈顿距离(Manhattan distance),即:
当p=∞时,它是各个坐标距离的最大值,即:
下图给出了二维空间中p取不同值时,与原点的 Lp 距离为1(Lp=1)的点的图形
可以看出由不同的距离度量所确定的最近邻点是不同的。
k值的选择
k值的选择会对k近邻法的结果产生重大影响。如果选择较小的k值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差(approximation error)会减小,但“学习”的估计误差(estimation error)会增大。如果选择较大的k值,则相反。
近似误差:可以理解为对现有训练集的训练误差。只管眼前训练,不管未来预测,模型本身并不是最接近真实分布,可能会发生过拟合现象。
估计误差:可以理解为对测试集的预测误差。最小化估计误差是使估计系数尽量接近真实系数,但对训练样本得到的估计值不一定最接近真实值;对模型本身来说,它能适应更多的问题(测试样本)。
换句话说,k 值的减小就意味着训练集的减小,参数相对较多,整体模型变得复杂,容易发生过拟合。k 值的增大就意味着整体的模型变得简单。
分类决策规则
k近邻法中的分类决策规则往往是多数表决,如果分类的损失函数为0-1损失函数,对给定的实例x∊x,其最近邻的k个训练实例点构成集合Nk(x)。如果涵盖Nk(x)的区域的类别是cj,那么误分类率是:
k近邻法的实现:kd树
算法核心在于怎么快速搜索k个近邻出来,朴素做法是线性扫描,当训练集很大时会非常耗时,不可取,这里介绍的方法是kd树。
构造kd树
搜索kd树
来源:https://www.cnblogs.com/xinxin86/p/11326004.html