【统计机器学习】k近邻算法

k近邻算法是一种基本的分类与回归方法。

输入为实例的特征向量,对应于特征空间上的点。输出为类别。

假设给定一个训练集,其中的实例类别已定,分类时,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决的方式进行预测。

因此k近邻法没有显式的学习过程

实际上是利于训练数据集对特征向量空间进行划分,作为其分类的模型。

k近邻法有3个基本的要素:

  • k值的选取
  • 距离度量
  • 分类决策规则

k近邻算法

k近邻算法简单直观。

给定一个训练集,对新的输入实例,在训练集中找到k个最近邻的训练实例,这k个实例多数属于哪个类,就把该输入实例分为这个类。

k近邻模型

模型

k近邻中当训练集、距离度量、k值及分类决策规则确定后,对于任何一个新的输入实例,它所属的类比被唯一的确定。

相当于根据上面的要素将特征空间划分为一些子空间,确定子空间找那个每个点所属的类别。

距离度量

特征空间上两个实例点的距离是两个实例点相似程度的反映。
k近邻模型的特征空间一般是n维实数空间向量 R n R^n Rn,使用的距离是欧式距离,但也可以是其他距离
在这里插入图片描述
p=2时为欧式距离。
p=1时为曼哈顿距离。
p= ∞ \infty 为各个坐标距离的最大值
在这里插入图片描述

k值的选择

k值的选择会对k近邻的结果产生重大影响。

如果选择较小的k值,相当于用较小的邻域中的训练实例进行预测。预测结果对近邻的实例点非常敏感,邻近节点一变化就会引起预测结果的变化。意味着容易发生过拟合,模型过于复杂。

如果选择较大的k值,相当于用较大的邻域中的训练实例进行预测。这时与输入实例距离较远的点(不相似)也会起作用,使预测发生错误,模型过于简单,容易欠拟合。

在应用中,k值一般先取一个比较小的数值。通常采用交叉验证来选取最优的数值。

分类决策规则

k近邻法中的分类决策规则一般采用多数表决

k近邻法的实现:kd树

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

k近邻法最主要的实现方法是线性扫描。这时要计算输入实例与每一个训练实例的距离。非常耗时

为了提高效率,可以考虑特殊的结果存储训练数据。下面介绍kd树

构造kd树

kd树是一种对k维空间中的实例点进行存储以对其进行快速检索的树形结构,是二叉树,表示对k维空间的一个划分。

构造方法如下:
构造根节点,使根节点包含所有实例点的超矩形区域。通过下面的递归方法不断地对空间进行切分,生成子节点。
在超矩形区域选择一个坐标轴和在此坐标轴上的一个切分点,确定超平面垂直于坐标轴,将当期区域划分为左右两个子区域。

通常依次选择坐标轴进行切分,选择位于坐标轴的中位数为切分点。
在这里插入图片描述
在这里插入图片描述
对应的kd树
在这里插入图片描述

搜索kd树

kd树可以减去大部分数据点的搜索,减少搜索量。

给定一个目标点,搜索其最近邻,首先找到包含目标点的叶节点。然后从该叶节点出发,依次回退到父节点。不断查找与目标点最近的节点。当确定不可能存在更近节点时停止,这样搜索就被限制在空间的局部区域上,效率大为提高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值