第一部分、K近邻算法
1.1、什么是K近邻算法
K近邻算法,简称KNN算法,通俗地说:就是寻找K个最近的邻居;当K=1时,算法便成了最近邻算法,即寻找最近的那个邻居。
用官方的话来说,所谓K近邻算法,即是给定一个训练集,对新的输入实例,在训练集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居),这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
根据这个说法,咱们来看下引自维基百科上的一幅图:
如上图所示,有两类不同的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。
下面,我们就要解决的问题是:给这个绿色的圆分类。
如果K=3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
如果K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。
衡量待分类点周围邻居的权重,而把它归到权重更大的那一类。这就是K近邻算法的核心思想。
1.2、K值的选择
K值的选择对K近邻算法的结果会产生很大影响。
如果选择较小的K值,预测结果会对近邻的实例点非常敏感。如果近邻的实例点恰巧是噪声,预测就会出错。
如果选择较大的K值,与输入实例不相似的训练实例会使预测发生错误。
在实际应用中,K值一般取一个比较小的数值。可以采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)来选择最优的K值。