1. 算法介绍
KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一
KNN的全称是K Nearest Neighbors,意思是K个最近的邻居。K个最近邻居,K的取值肯定是至关重要的。KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。
图中绿色的点就是我们要预测的那个点,假设K=3。那么KNN算法就会找到与它距离最近的三个点(这里用圆圈把它圈起来了),看看哪种类别多一些,比如这个例子中是蓝色三角形多一些,新来的绿色点就归类到蓝三角了。
2. 距离计算
二维空间两个点的欧式距离计算公式如下:
计算(x1,y1)和(x2,y2)的距离。拓展到多维空间,则公式变成这样:
KNN算法就是将预测点与所有点距离进行计算,然后保存并排序,选出前面K个值看看哪些类别比较多。
3. 交叉验证选取k值
通过交叉验证计算方差后你大致会得到下面这样的图:
在许多实际应用中数据是不充足的。为了选择好的模型,可以采用交叉验证方法。交叉验证的基本想法是重复地使用数据,把给定的数据进行切分,将切分的数据组合为训练集与测试集,在此基础上反复进行训练测试以及模型的选择。
你增大k的时候,一般错误率会先降低,因为有周围更多的样本可以借鉴了,分类效果会变好。但注意,和K-means不一样,当K值更大的时候,错误率会更高。这也很好理解,比如说你一共就35个样本,当你K增大到30的时候,KNN基本上就没意义了。