kNN近邻算法一般流程
kNN算法的来源这里不多讲,引用百度百科上面的概述图,如图1所示。简单说,已知一个数据集包含图中,w1,w2,w3三大类(我们称之为训练数据),当引入一个新的数据(如图中黑色所示)需要判断这个数据应该归属于哪一类的分类算法。
图中所概述的就是kNN算法的简易原理,kNN算法中包含一个重要的调试参数 K, 对这个参数 k 取值是认为的。如图所示,我们选取 k = 5个点,其中这5个点是整个训练数据集中的距离需要被判断的黑色的数据最近的5个数据点。将这个最近的k = 5个数据点作为一个集合,我们需要判断的是,这个集合中属于w1,w2,w3哪一类的个数最多,我们边将这个被测的黑色数据点判定为属于最多的哪类数据。
图1 KNN算法概述图
简易例子及程序
注:这里为了简易表达kNN算法的意义,只列举简易的例子,通过简单的编程,来让大家对kNN算法有个直观的感受。
准备10个点,[1.0,1.1],[1.0,1.0],[0.9,0.8],[0.9,0.9],[0.8,0.8],[0,0],[0,0.1],[0.1,0.1],[0.2,0.3],[0.1,0.1]。将这个10个点划分至 A,B两个分类:['A','A','A','A','A','B','B','B','B','B']。判断点[0.5,0.6] 属于A,B中那个类别。
程序如下:
图1 加载库
图2 输入训练数据函数
图3 执行kNN并返回结果
输入需分类的数据
图4 输入被测试数据[0.5,0.6]
图5 执行结果A类
说明
在这个简易的例子中,选取 K = 7,可以想到对于不同的K值,对实际分类的结果是有影响的,这也需要在实际的问题中,实际处理了。当然,在二分类问题中,一般说来还是简易 K 取值为奇数,这是因为避免出现 K 为偶数时,属于A,B类的数量是相等的情况。可以通过plot函数来显示出来,以直观感受,参考下图中的多行注释。
图6
图7 橙色数据为待分类数据