K-近邻法

内容来源于李航博士《统计学习方法》

一、k近邻算法

什么是k近邻

k近邻算法简单、直观:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例的多数属于某个类,就把该输入实例分为这个类。
K-近邻法
工作原理

  • 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每个数据与所属分类的对应关系。
  • 输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。
  • 一般来说,只选择样本数据集中前N个最相似的数据。K一般不大于20,最后,选择k个中出现次数最多的分类,作为新数据的分类

特点
优点
 精度高
 对异常值不敏感
 无数据输入假定
缺点
 计算复杂度高
 空间复杂度高
 适用数据范围
 数值型和标称型

一般流程

  • 收集数据:可以使用任何方法
  • 准备数据:距离计算所需要的数值,最后是结构化的数据格式。
  • 分析数据:可以使用任何方法
  • 训练算法: (此步骤kNN)中不适用
  • 测试算法:计算错误率
  • 使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k-近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理。

二、k近邻模型

k近邻法使用的模型实际上对应于对特征空间的划分。模型由三个基本要素——距离度量、k值的选择和分类决策规则决定。
模型
k近邻法中,当训练集、距离度量(如欧氏距离)、k值及分类决策规则(如多数表决)确定后,对于任何一个新的输入实例,它所属的类唯一地确定。这相当于根据上述要素将特征空间划分为一些子空间,确定子空间里的每个点所属的类。这一事实从最近邻算法中可以看得很清楚。

特征空间中,对每个训练实例点ix,距离该点比其他点更近的所有点组成一个区域,叫作单元(cell)。每个训练实例点拥有一个单元,所有训练实例点的单元构成对特征空间的一个划分。最近邻法将实例ix的类iy作为其单元中所有点的类标记(class label)。这样,每个单元的实例点的类别是确定的。
K-近邻法

距离度量
K-近邻法
k 值的选择
如果选择较小的K值

  • “学习”的近似误差(approximation error)会减小,但“学习”的估计误差(estimation error) 会增大,
    噪声敏感
  • K值的减小就意味着整体模型变得复杂,容易发生过拟合.

如果选择较大的K值,

  • 减少学习的估计误差,但缺点是学习的近似误差会增大.
  • K值的增大 就意味着整体的模型变得简单.

分类决策规则
K-近邻法

三、k近邻的实现

实现k近邻法时,主要考虑的问题是如何对训练数据进行快速k近邻搜索。这点在特征空间的维数大及训练数据容量大时尤其必要。

k近邻法最简单的实现方法是线性扫描(linear scan)。这时要计算输入实例与每一个训练实例的距离。当训练集很大时,计算非常耗时,这种方法是不可行的。

为了提高k近邻搜索的效率,可以考虑使用特殊的结构存储训练数据,以减少计算距离的次数。