k近邻(k-Nearest Neighbor,简称KNN)学习是一种常用的监督学习方法。
对象通过其邻居的多个投票进行分类,其中对象被分配给其k个最近邻居中最常见的类(k是正整数,通常是小整数)。如果k = 1,则简单地将对象分配给该单个最近邻居的类。 ---------《维基百科》
在维基百科中,是引用下图做的介绍:
当k值为3的时候,就是我们在图中看到的黑色实线圆圈,在圆圈以内,有两个
红色的三角形和一个蓝色的正方形,此时,我们会将标有问号的绿色圆圈(预测数据)推测是红色三角形;
同理,当k=5的时候,便是黑色虚线圆圈中,我们可以看到,里面有三个蓝色正方形以及两个红色三角形,此时将预测数据推断为蓝色正方形。
k指的是预测数据周围的“邻居”数量,当k等于1时,预测该类是最接近的训练样本的类的特殊情况被称为最近邻居算法。
工作机制:
给定测试样本,基于某种距离度量找出训练集中与其最接近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。
分类依据:
通常,在分类中一般选择“投票法”,就是我们通常说的“少数服从多数”,即选择在这k个样本出现最多的类别标记作为预测结果。
而在回归任务中,可选用以下方法进行分类:
一、“平均法”,即将这k个样本的实值输出标记的平均值作为预测结果;
二、基于距离远近进行加权平均或加权投票,距离越近的样本权重越重;
三、自定义权重算法。
特征:
是“懒惰学习”(lazy learning)的代表,在训练集仅仅将样本保存起来,训练时间开销为零,等收到样本之后在进行处理。
影响knn精度的因素:
1. k值的选取
k的最佳选择取决于数据; 通常,较大的k值会降低噪声对分类的影响,但会使类之间的界限不那么明显。可以通过各种启发式技术选择好的k;
2. 距离算法
连续变量的常用距离度量是欧几里德距离。对于离散变量,例如用于文本分类,可以使用另一个度量,例如重叠度量(或汉明距离)。在基因表达微阵列数据的背景下,例如,k- NN也已经与相关系数一起使用,例如Pearson和Spearman。[3]通常,如果通过专门算法(如大边距最近邻或邻域分量分析)学习距离度量,则可以显着提高k -NN 的分类准确度。
3. 决策的规则(uniform,distance,自定义)
- ‘uniform’ 均匀的权重。每个社区的所有积分均等
- ‘distance’ 重量点距离的倒数。在这种情况下,查询点的较近邻居将比远离的邻居具有更大的影响力。