K nearest neighbor
KNN,全名k近邻算法。
KNN的核心思想是先计算每个样本与单个特征空间上的距离(距离可有欧式距离、曼哈顿距离、马氏距离等,详见附录一),再找出与每个样本距离最近的k个点,最后将其归类为k个邻居中类别最多的那一类;
适用场景:一般多用于分类任务,也可用来处理回归任务。
优点:
- 原理简单,易于理解;
- 对异常值不敏感;
- 对数据的特征类型没有明确的要求;
缺点:
- 样本不平衡问题,容易将样本分入类别中样本较多的那一类;
- 特征较多时,计算复杂度高,空间复杂度高;
- 相比决策树,KNN的可解释性不强;
关键点:
- k值的选取,k值为10以内的奇数(奇数是为了避免出现打成平手的情况),也可以通过交叉验证的方式来选取得到合适的k值。
进阶:
- 在上面介绍到KNN可以通过一一计算新样本与原有样本的距离可以将其分类,但是在新样本量较大的情况下就会面临较大的计算量的问题,所以有了kd树,本质上主要是为了降低计算的复杂度而提出的,具体原理我自己也不是很清楚。
本文探讨性问题:
- KNN主要多用于解决分类问题,但是目前流行的是用XGB、lightgbm这种集成学习模型,那么现在KNN是否还有它独特的使用场景?
- 关于处理回归问题,如何计算其最终的预测值?根据得到的k个近邻样本,计算这k个近邻的均值作为其预测值。(参考文章:经典算法之K近邻(回归部分))
- 欢迎大家积极讨论补充
参考文章:
- 《统计学方法》李航,p37-45;
- 《机器学习实战》李锐等译,p15-31:主要是手撕代码,个人认为没有必要,确实可以提高coding能力,但是与时间的消耗不成正比;
- CNN RNN fast-RNN BP DNN KNN各自的适用场景和优缺点,主要是看到了该博主介绍原理的思路框架,有所启发;
- KNN算法优缺点;