一、K近邻
1.1 基本介绍
k近邻法(k-NN)是一种基本的分类和回归方法,更偏向于分类。k近邻简单直观:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最接近的k个实例,这k个实例的多数属于某个类,就把该输入实例分为这个类。k近邻模型没有显式的学习过程,有三个要素:k值的选择、距离度量和分类决策规则。
1.2 k值的选择
如果选择较小的k值,就相当于用较小的邻域中的训练实例进行预测,近似误差会减小,但估计误差会增大,容易受到噪声的干扰。也意味着模型整体变得比较复杂,容易发生过拟合。
如果选择较大的k值,就相当于用较大的邻域中的训练实例进行预测,可以减少学习的估计误差,但学习的近似误差会增大。也意味着模型变得简单,容易发生欠拟合。
通常是选取一个比较小的值,然后采用交叉验证法来选取最优的k值。
1.3 距离的度量
特征空间中两个实例点的距离是两个实例点相似程度的反映。不妨设特征空间是,有两点,一般使用的有距离和Minkowski距离:
距离:
欧式距离():
曼哈顿距离():
时,
1.4 分类决策规则
k近邻法中的分类决策规则往往是多数表决,即由输入实例的个邻近的训练实例中的多数类决定输入实例的类。
二、k近邻法的实现:kd树
2.1 基本思想
k近邻法最简单的实现方法是线性扫描,这时要计算输入实例与每个训练实例的距离,当训练集很大时,计算非常耗时。为了提高k紧邻搜索的效率,可以使用特殊的结构存储训练数据,以减少计算距离的次数,其中的一种方法就是kd树。
2.2 构造kd树
kd树是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。kd树是二叉树,表示对k维空间的一个划分。
构造kd树的方法如下:构造根节点,使根节点对应于k维空间中包含所有实例点的超矩形区域。通过下面的递归方法,不断的对k维空间进行划分,生成子节点。即:在超矩形区域上选择一个坐标轴和在此坐标轴上的一个切分点(一般为中位数),确定一个超平面,这个超平面通过切分点并垂直于选定的坐标轴,将当前超矩形区域切分为左右两个子区域(子节点);这时,实例点被分到两个子区域。这个过程直到子区域内没有实例点时终止(终止的节点为叶节点)。
2.3 搜索kd树
2.4 优缺点
- 优点:
- KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练
- KNN理论简单,容易实现
- 对异常值不敏感
- 既可以做回归,又可以做分类,更多是做分类
- 缺点:
- 对于样本容量大的数据集计算量比较大。
- 样本不平衡时,预测偏差比较大。
- 受值影响较大
2.5 其它
- 需要进行标准化处理
- 面经 机器学习 KNN