K nearest neighbor

KNN,全名k近邻算法。

KNN的核心思想是先计算每个样本与单个特征空间上的距离(距离可有欧式距离、曼哈顿距离、马氏距离等,详见附录一),再找出与每个样本距离最近的k个点,最后将其归类为k个邻居中类别最多的那一类;

适用场景:一般多用于分类任务,也可用来处理回归任务。

优点:

  • 原理简单,易于理解;
  • 对异常值不敏感;
  • 对数据的特征类型没有明确的要求;

缺点:

  • 样本不平衡问题,容易将样本分入类别中样本较多的那一类;
  • 特征较多时,计算复杂度高,空间复杂度高;
  • 相比决策树,KNN的可解释性不强;

关键点:

  • k值的选取,k值为10以内的奇数(奇数是为了避免出现打成平手的情况),也可以通过交叉验证的方式来选取得到合适的k值。

 进阶:

  • 在上面介绍到KNN可以通过一一计算新样本与原有样本的距离可以将其分类,但是在新样本量较大的情况下就会面临较大的计算量的问题,所以有了kd树,本质上主要是为了降低计算的复杂度而提出的,具体原理我自己也不是很清楚。

本文探讨性问题:

  1. KNN主要多用于解决分类问题,但是目前流行的是用XGB、lightgbm这种集成学习模型,那么现在KNN是否还有它独特的使用场景?
  2. 关于处理回归问题,如何计算其最终的预测值?根据得到的k个近邻样本,计算这k个近邻的均值作为其预测值。(参考文章:经典算法之K近邻(回归部分))
  3. 欢迎大家积极讨论补充

 参考文章:

  1. 《统计学方法》李航,p37-45;
  2. 《机器学习实战》李锐等译,p15-31:主要是手撕代码,个人认为没有必要,确实可以提高coding能力,但是与时间的消耗不成正比;
  3. CNN RNN fast-RNN BP DNN KNN各自的适用场景和优缺点,主要是看到了该博主介绍原理的思路框架,有所启发;
  4. KNN算法优缺点;

KNN引用包 knn 应用_曼哈顿距离