近邻法( -nearest neighbor, -NN)是一种基本分类与回归方法,《统计学习方法》只讨论分类问题中的 近邻法。 近邻法假设给定一个训练数据集,其中的实例类别已定,分类时根据其 个最近邻的训练实例的类别,通过多数表决等方式进行预测。
1、 近邻算法
给定训练数据集
在训练集
中找出与
最近邻的
个点,涵盖这
个点的
的邻域记作
,根据以下规则决定
的类别
式中,I为指示函数,
是实例的类别。
近邻法的特殊情况是
的情形,成为最近邻算法。
近邻法没有显式的学习过程。
2、 近邻模型
近邻法中,任何一个新的输入实例,它所述的类唯一地确定。这相当于将特征空间划分为一些子空间,确定子空间里的每个点所属的类,每个子空间的类别是唯一确定的。
特征空间中两个实例点的距离是两个实例点相似程度的反映,这个距离可以是欧式距离,也可以是更一般的
距离(
distance)或Minkowski距离(Minkowski distance)。
,
的
距离定义为
当
时,称为欧式距离(Euclidean distance);当
时,称为曼哈顿距离(Manhattan distance);当
时,它是各个坐标距离的最大值,即
值的选择会对结果产生重大影响。
如果选择较小的
值,相当于用较小的邻域进行预测,近似误差(approximation error)会减小,但估计误差(estimation error)会增大。换句话说,
值减小意味着模型变得复杂,容易发生过拟合。
如果选择较大的
值,估计误差减小,但近似误差增大,模型变得简单。在应用中,
值一般取一个比较小的数值,通常用交叉验证来选取最优
值。
近邻法中的分类规则往往是多数表决。多数表决规则(majority voting rule)有如下解释:
对给定的实例
,其最近邻的
个训练实例点构成集合
,若涵盖
区域的类别是
,那么误分类率是
可以看到,多数表决规则等价于经验风险最小化。
3、 近邻法的实现: 树
当训练集很大时,如果要计算输入实例与每一个训练实例之间的距离,以确定
个最近邻点,计算非常耗时,因此使用
树结构存储训练数据,以减少计算距离的次数。
构造
树相当于不断用垂直于坐标轴的超平面将
维空间切分,构成一系列的
维超矩形区域,
树的每个结点对应于一个
维超矩形区域。
首先构造根节点,使其对应于包含所有实例点的超矩形区域;再通过递归方法,不断对
维空间进行切分,生成子结点。通常依次选择坐标轴对空间切分,选择训练实例点在选定坐标轴上的中位数(median)为切分点,这样得到的
树是平衡的。
构造完
树后,接着考虑如何进行搜索,以最近邻搜索为例。
(一)首先找到包含目标点
的叶结点:从根节点出发,递归向下访问
树,若目标点
当前维的坐标小于切分点的坐标,则移动到左子结点,否则移动到右子结点,直到子结点为叶结点。
(二)暂时以此叶结点为“当前最近点”。
(三)递归地向上回退,如果该结点保存的实例点比“当前最近点”距离目标点
更近,则以该结点为“当前最近点”;检查“当前最近点”的父节点的另一子结点对应的区域是否有更近的点。
(四)当回退到根节点时,搜索结束,最后的“当前最近点”即为
的最近邻点。
树的平均计算复杂度是
,
为训练实例数。
树更适用于训练实例数远大于空间维数时的
近邻搜索,当训练实例数接近空间维数时,它的效率会迅速下降,几乎接近线性扫描。