k近邻算法(k-Nearest Neighbor,简称kNN):给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最接近的
个实例,通过这
个实例投票决定该输入实例的类别。
输入: 熟练集
输出: 实例
所对应的类别
最近的
个点,将包含这
个点的
邻域记作
中根据分类决策规则(如多数表决)将
划分到某个类别
特殊地,当
等于1时,相当于将输入实例
划分到训练数据集中与
距离最近点所属的类别。
唯一确定一个k近邻模型由三方面构成:距离度量方式、k值的选取和分类决策规则。
我们用两个点的距离远近来度量它们的相似程度,
近邻模型的特征空间是
维实数向量空间
,我们常使用欧式距离来衡量两个点的距离,但也可以是更一般的
距离:
当选取的
值较小时,相当于用较小邻域的训练实例进行预测,更容易受噪声干扰(比如邻近的实例点恰好是噪声就会出错),即
越小则模型过拟合的风险越大。 当选取的
较大时,相当于用较小邻域的训练实例进行预测,这时候与输入实例较远(相似度较小)的训练实例也会对预测产生影响,从而降低模型准确率。
特别的,
等于1时相当于用离输入样例
最近的训练实例做预测;
等于
时无论输入实例是什么,都简单地用训练实例中样本数最多的类别作为预测类别。
在应用中,
值在比较小的数值范围内取,并且结合交叉验证方法确定最优
值。
近邻方法中的分类决策规则往往是多数表决,即由输入实例的
个邻近实例中的多数类作为预测类别。
套用监督学习中的损失函数和风险函数知识,多数表决规则等价于经验风险最小化,推导如下:
给定输入实例
,其邻近
个训练实例构成集合
,如果涵盖
区域的类别是
,那么误分类率为:
要令误分类率即经验风险最小,相当于最大化
,也就是多数表决。因此在
近邻中多数表决规则等价于经验风险最小化。
当训练集很大时,计算输入实例和每一个训练实例的距离相当耗时。为了提高
近邻搜索的效率,我们使用特殊的结构存储训练数据来减少计算距离的次数,比如
树方法。
树(k-dimension tree)是一种对
维空间中的实例点进行存储以便对其进行快速检索的二叉树形数据结构。构造
树相当于不断用垂直于坐标轴的超平面将
维空间切分,构成一系列的
维超矩形区域,
树上的每一个结点对应于一个
维超矩形区域。该超矩形区域垂直于当前划分维度的坐标轴,并在该维度上将空间划分为两部分。
输入:
维空间数据集
,其中
输出:
树
的
维空间的超矩形区域:以
为坐标轴,
中所有实例的
坐标的中位数为切分点将超矩形区域划分为两个子区域。此步生成深度为1的左、右结点:左子结点对应坐标
小于切分点的子区域,右子结点对应于坐标
大于切分点的子区域。正好落在划分超平面上的实例点保存在根结点。
的结点,选择
为切分的坐标轴(
,因为可能存在对同个维度进行多次划分),以该结点的区域中所有实例的
坐标的中位数为切分点划分结点对应的超矩形区域。
注意到没,
树的思想和二分法很像,并且都能提高搜索的效率。
注意
树中的
指特征维度数,但
近邻算法中的
表示最邻近的
个点。 搜索方法如下: 输入: 已知的
树,目标点
输出:
的最近邻
树中包含目标点
的叶结点(即包含输入样例的超矩形区域):从根结点出发,递归地向下访问直到子结点为叶结点
的最近邻点。
树的平均计算复杂度是
树更适用于训练实例数远大于空间维数的
近邻搜索,当空间维数接近训练实例数时,它的效率会迅速下降,几乎接近于线性扫描(即挨个计算训练数据集每个点和输入样例的距离)
近邻算法既能用于分类,也能用于回归,比较简单的回归就是用
近邻点的平均值来预测输入样例的预测值。
近邻模型由三个因素决定:距离度量方法、
值选取和分类决策规则
李航 《统计学习方法》