K-邻近算法(KNN)
原理
KNN是最简单的分类算法之一,也是最常用的分类算法之一,KNN算法是有监督学习中的分类算法。
KNN算法的基本法则是:相同类别的样本之间在特征空间中应当聚集在一起,也就是说当要预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。
算法流程![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a8ba1d1d68acc94a97543d77b67036bd.png)
具体如下图所示:
图中绿色点为我们要预测的值,当K值等于三时,算法判断离绿色点最近的三个图形中哪一类图形最多就将新预测的点归为哪一类。
当K值改变时,预测结果也会发生改变,如若当K=5,预测的结果变成红色的圆(如下图所示),由此可见,K值的选择在KNN算法中起着至关重要的作用
K值的选择
不同k值的影响
一般来说,从K=1开始,随着K的逐渐增大,K近邻算法的分类效果会逐渐提升;在增大到某个值以后,随着K的进一步增大K近邻算法的分类效果会逐渐下降。
K值较小,相当于用较小的邻域中的训练实例进行预测,只有距离近的(相似的)起作用。因此会有如下影响:
·单个样本影响大
·噪声敏感
·整体模型变得复杂,r容易发生过拟合
K值较大,这时距离远的(不相似的)也会起作用。因此会有如下影响:
·近似误差会增大,但估计误差会减小
·整体模型变得简单
K值选择
·一般k值较小。
·k通常取奇数,避免产生相等占比的情况。
·往往需要通过“交叉验证(Cross Validation)”等方法评估模型在不同取值下的性能,进而确定具体问题的K值。
案例实现(课本实验)
电影类别分类
代码
from numpy import *
import operator
def createDataSet():
group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels = ['A','A','B','B'