KNN最邻近分类算法

KNN(K-Nearest-Neighbor)最邻近分类算法

提出问题

已知N维空间中若干个点的坐标,以及这些点所属的类别(子空间)。给定新的点坐标,如何判断该点应被划入哪个类别(子空间)?
0


分析问题

KNN(K-Nearest-Neighbor)算法基本思想:

  • 已知一批数据集及其对应的分类标签,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集里与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类。
  • 具体步骤:
    (1) 计算测试数据与各个训练数据之间的距离;
    (2) 按照距离的递增关系进行排序;
    (3) 选取距离最小的K个点;
    (4) 确定前K个点所在类别的出现频率;
    (5) 返回前K个点中出现频率最高的类别作为测试数据的预测分类。
    每次预测时,必须即时跟所有训练数据进行计算,因此工作量很大。

K值的选取:

  • K可以视为一个hyper-parameter(超参数),一般需要通过交叉验证的方法来选取最优值
  • 如果K值太小就意味着整体模型变得复杂,容易发生过拟合(High Variance),即如果邻近的实例点恰巧是噪声,预测就会出错,极端的情况是K=1,称为最近邻算法,对于待预测点x,与x最近的点决定了x的类别
  • K值的增大意味着整体的模型变得简单,极端的情况是K=N,那么无论输入实例是什么,都简单地预测它属于训练集中最多的类。这样的模型过于简单,容易发生欠拟合(High Bias)

K-D树方法:

  • K近邻法的最简单实现是线性扫描(又称暴力法),这时要计算输入实例与每一个训练实例的距离,当训练集很大时,计算非常耗时,这种方法是不可行的
  • 为了提高K近邻搜索的效率,可以考虑使用特殊的结构存储训练数据,以减少计算距离的次数。K-D树提供了一种最基本的方法
  • 可将K-D树看成类似于二叉查找树的数据结构,每个训练数据存储在这个数据结构中。在查找数据时,采用类似于中序遍历的算法。(但实际过程要复杂许多)。
  • K-D树搜索的平均复杂度为 𝑂(𝑙𝑜𝑔𝑀) 。其中,M为样本数量。但是当Feature数量N很大时,搜索性能将急剧下降。一般K-D树适于M>>N的情形

KNN的优点:

  • 精度较高,对异常值不太敏感
  • 特别适合多分类的情况
  • 简单易实现
  • 很多情况下比朴素贝叶斯的效果更好

KNN的缺点:

  • 计算复杂度高࿰
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值