KNN算法概述
K-近邻算法(KNN,K-NearestNeighbor)是最常用的分类算法之一,属于有监督学习中的分类算法。
先来看个例子:
如图,对于一个待分类点(绿色圆点),
如果K = 3,绿色圆点最近的3个邻居是2个红色三角形和1个蓝色正方形,少数服从多数,基于统计的方法,判定该分类点属于红色三角形一类。
如果K = 5,绿色圆点最近的5个邻居是2个红色三角形和3个蓝色正方形,少数服从多数,基于统计的方法,判定该分类点属于蓝色正方形一类。
KNN算法基本思想:
对待分类的点:
①计算已知类别数据集中的点与该点的距离
②按照距离依次排序
③选取与该点距离最小的K个点
④确定前K个点所在类别的出现概率
⑤返回前K个点出现频率最高的类别作为该点的预测分类
(看到这里应该明白为什么叫K-NearestNeighbor算法了吧)
KNN算法特点:
KNN算法是一种lazy-learning算法,KNN算法分类器不需要使用训练集进行训练,训练时间复杂度为0 。
但是,因为KNN分类器直接对训练样本进行分类,计算比较每个样本离待分类点的距离,所以KNN分类的计算复杂度与训练集中的样本数成正比。
KNN算法的优缺点
优点:
原理简单,模型训练时间快,分类预测的效果较好。
缺点:对异常值不敏感,预测效率低
距离的计算
通常KNN算法中使用欧式距离,以二维平面为例,二维空间两个点的欧式距离计算公式如下:
K值的选择
对于K值的选择,一般通过交叉验证(将样本数据按照一定比例,拆分出训练用的数据和验证用的数据,比如6:4拆分出部分训练数据和验证数据),从选取一个较小的K值开始,不断增加K的值,然后计算验证集合的方差,最终找到一个比较合适的K值。通过交叉验证计算方差后大致会得到下面这样的图:
增大k时,错误率会先降低,因为有周围更多的样本可以借鉴了,分类效果会变好,但当K增大到一定程度时效果又会逐渐变差,因为K越大就越接近整体样本的分布。
参考文章:
https://www.cnblogs.com/listenfwind/p/10311496.html