机器学习 | k近邻

一.基本原理

  • 如果一个样本在特征空间中的k个量相似的样本中的大多数属于某一个类别,则该样本也属于这个类别
  • 为了判断未知实例样本的类别,以所有已知实例类别作为参考,我们可以选择参数k计算未知实例与所有已知实例的距离(一般使用欧氏距离),选择最近k个已知实例,通常k是不大于20的整数,在这k个实例中可能多种类别,我们遵循少数服从多数的原则,让未知实例归类为k个最近临近样本中最多数的类别

KNN算法的主要流程:

  • 准备数据,对数据进行预处理
  • 计算已知类别数据集中的点与当前点之间的距离
  • 按照距离递增次序排序
  • 选取与当前距离最小的k个点
  • 确定前k个点所在类别的出现频率
  • 返回前k个点出现频率最高的类别作为当前点的预测分类

二.优缺点

优点

  • 简单有效,易于实现
  • 可以通过对k的选择可具备丢噪音数据的健壮性
  • 重新训练的代价低
  • 适合类域交叉样本:KNN方法主要靠周围有限的邻近样本,而不是靠判别类域的方法来确定所属类别的,因此,对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更适合
  • 适合大样本自动分类:那些样本容量较小的类域采用这种算法比较容易产生误分

缺点

  • 惰性学习:KNN算法是懒散学习方法,一些积极学习的算法要快很多
  • 类别评分不是规格化:不像一些通过概率评分的分类
  • 输出可解释性不强:例如决策树的输出可解释性就较强
  • 对不均衡的样本不擅长:当样本不均衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。该算法只计算最近的邻居样本,某一类别的样本数量很大,那么该类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果,可以采用权值的方法来改进
  • 计算量较大:目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本
  • 算法需要大量的空间存储,算法复杂性高,需要将未知实例和所有的已知实例进行比较,当一类样本数量过大占主导地位的时候,k也设为很大的时候,新的未知实例容易被数量大的样本主导,但有可能这个未知实例并不接近这个最多的样本类别,它可能更接近其它类别,但这个问题也是可以解决的,为了解决这个问题,根据样本设置权重,比如权重为1/d(d为距离),距离越近权重越大

三.适用场景

  • 可以完成一些简单的监督学习任务,即分类与回归
  • 由于KNN具有KMeans的所有属性,所以用KNN来做含标签聚类也是可以的

四.常见面试题

1.k值的选择

  • 选择较小的k值,就相当于用较小的领域中的训练实例进行预测,学习近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用。与此同时带来的问题是学习的估计误差会增大。换句话说,k值的减小就意味着整体模型变得复杂,容易发生过拟合
  • 选择较大的k值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测起作用,使预测发生错误,且k值的增大就是意味着整体模型变得简单
  • k=N(N为训练样本个数),则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单,忽略了训练实例中大量的有用信息
  • 在实际应用中,k值一般取一个较小的数值,例如采用交叉验证法来选择最优的k值

2.在K近邻的样本搜索中,如何进行高效的匹配查找?

  • 线性扫描(数据多时,效率低)
  • 构建数据索引——clipping和overlapping两种。前者划分的空间没有重叠,如KD树,后者划分的空间相互交叠,如R树

3.什么是KD树?怎么构建KD树?

KD树是对数据点在K维空间中划分的一种数据结构,主要用于多维空间关键数据的搜索

本质上,KD树就是一种平衡二叉树

KD树的构建过程

  • 先计算各个维度的方差,选取方差最大的维度作为候选划分维度(方差越大,表示此维度上数据越分散)
  • 对split维度上的值进行排序,选取中间的点为node-data
  • 按照split维度的node-data对空间进行一次划分
  • 对上述子空间递归以上操作,直到空间只包含一个数据点。分而治之,且循环选取坐标轴

4.不平衡的样本可以给k近邻的预测结果造成哪些影响,怎么解决?

  • 输入实例的k邻近点中,大数量类别的点会比较多,但其实可能都离实例较远,这样会影响最后的分类
  • 可以使用权值来改进,距实例较近的点赋予较高的权值,交院的赋予较低的权值
  • 样本不平衡的时候,对稀有类别的预测准确率低。有时候我们会遇到这样的问题,即样本中某系类别的样本非常的少,甚至少于k,这导致稀有类别样本在找k个最近邻的时候,会把距离其实较远的其它样本考虑进来,而导致预测不准确
  • 为了解决这个问题,我们限定最近邻的一个最大距离,也就是说,我们只在一个距离范围内搜索所有的最近邻,这避免了上述问题,这个距离我们一般称为限定半径

5.怎么解决k近邻算法计算量过大的问题?

可以采用分组计算的方式解决

  • 先将样本按距离分解成组,获得质心
  • 然后计算未知样本到各质心的距离
  • 选出距离最近的一组或几组,再在这些组内引用k近邻
  • 本质上就是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本,该方法比较适用于样本容量比较大时的情况

6.k-means和k近邻的区别?

k-means:

  • 是聚类算法
  • 非监督学习
  • 数据集是无标签数据,是杂乱无章的,经过聚类后才变得有点顺序。即是一个先无序,后有序的过程
  • 需要前期预训练过程
  • k的含义:数据集可以分为k个簇,一般是通过先验知识选取

k近邻:

  • 是分类算法
  • 监督学习
  • 数据集是带标签的数据
  • 不需要预训练过程
  • k的含义:测试样本点周围的k个邻近点

相似点

  • 二者都用到了最近邻算法(NN),一般用KD树来实现
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值