第三章 k近邻法
文章目录
k近邻法(k-nearnest neighbor, K-NN)是一种基本分类与回归方法.
- 对于输入的实例,k近邻法通过多数表决等方式进行预测,故其不具有显式的学习过程;
- 三个基本要素是:K值的选择、距离度量及分类决策准则.
3.1 k近邻算法
算法 3.1(k近邻法)
输入: 训练数据集
其中, 为实例的特征向量, 为实例的类别, , 实例特征向量.
输出: 实例所属的类.
(1) 根据给定的距离度量,在训练集中找出与最邻近的个点,涵盖这个点的的邻域记作:
(2) 在中根据分类规则(如多数表决)决定的类别:
其中,为指示函数,即当 时 ,否则.
3.2 k近邻模型
k近邻法使用的模型实际上对应于特征空间的划分
3.2.1 模型
-
k近邻法中,当其三要素基本确定后,对于一个新的输入实例,它所属的类唯一地确定.
-
k近邻法分类类似于将特征空间划分为一些子空间,确定子空间的每个点所属的类
3.2.2 距离度量
特征空间中两个实例点的距离是两个实例点相似程度的反映.距离计算有以下几种方法:
- 欧氏距离
- 距离( distance)
- Minkowski距离(Minkowski distance)
距离
- 时,称为欧氏距离(Euclidean distance)
- 当时,称为曼哈顿距离(Manhattan distance)
- 当时,它是各个坐标距离的最大值
3.2.3 K值的选择
k值的选择会对k近邻法的结果产生重大影响.
- k值较小,相当于选择较小的邻域中的训练实例进行预测,学习的近似误差(approximation error)会减小,但是估计误差(estimation error)会增大.即k值的减小就意味着整体模型变的复杂,容易发生过拟合;
- k值较大,相当于用较大的训练实例进行预测,可以减少学习的估计误差,但是近似误差会增大.即k值的增大意味着整体的模型变的简单.
在应用中,k值一般取一个比较小的数值.通常采用交叉验证法来选取最优的k值.
3.2.4 分类决策规则
一般是多数表决,即由输入实例的k个邻近的训练实例中的多数类决定输入实例的类.
3.3 k近邻法的实现:kd树
实现k近邻法时,主要考虑的问题是如何对训练数据进行快速k近邻搜索
- 简单地实现方法是线性扫描(linear scan),计算输入实例与每一个训练实例的距离. 在训练集很大时,计算十分耗时
- 树( tree)方法
3.3.1 构造树
树是一种对维空间中的空间进行存储以便对其进行快速检索的树形数据结构,是一种二叉树
构造 树的算法如下所示:
算法3.2 (构造平衡树)
输入: 维空间数据集, 其中
输出: 树
(1) 开始:构造根节点,根节点对应于包含 的 维空间的矩形区域.
选择 为坐标轴,以 中所有实例的 坐标的中位数为切分点,将根节点对应的超矩形区域切分为两个子区域.切分由通过切分点并与坐标轴 垂直的超平面实现.
由根节点生成深度为1的左、右子节点;左子节点对应坐标 小于切分点的子区域,右子节点对应与坐标 大于切分点的值区域.
将落在切分超平面上的实例点保存在根节点.
(2) 重复:对深度为的结点,选择 为切分的坐标轴,,以该结点的区域中所有实例的 坐标的中位数为切分点,将该结点对应的超矩形区域切分为两个子区域.切分由通过切分点并与坐标轴 垂直的超平面实现.
由该结点生成深度为的左、右子结点,左子结点对应于坐标小于切分点的子区域,右子结点对应坐标大于切分点的子区域.
将落在切分超平面上的实例点保存在该结点.
(3) 直到两个子区域没有实例存在时停止,从而形成树的区域划分.
3.3.2 搜索 树
使用树可以省去对大部分数据点的搜索,从而减少搜索的计算量.