KK近邻算法

一、KK近邻算法的优势

寻常对分类器会将全部的数据都记下来,把当前的测试对象和某个训练对象的属性进行比较,当完全匹配时就可以进行分类。但是这样有很大的问题:有的测试对象可能与任何的训练对象都不匹配,同时也有可能发生一个测试对象与若干个训练对象的类别标记都匹配,这样就无法很好的实现分类问题。
KNNKNN算法是从训练集中找出KK个最接近测试对象的训练对象,再从这KK个训练对象中找到居于主导地位的类别,然后将其赋给测试对象。

二、KK近邻算法的关键

(1)用于决策的已经被标记的对象集合
(2)用于计算对象之间临近程度的距离或者类似的相似性指标
(3)最近邻的个数KK
(4)基于KK个最近邻及其类别来判定目标对象类别的方法
KNNKNN也是一种惰性的学习方法,也就是说直到预测阶段时才会去处理训练数据。

三、K近邻算法算法描述

———————————————————————————————————
输入DD是训练集;zz是待测试对象(是由属性值构成的向量);LL,是对象的类别标签集合
输出czLc_z\in{L},即zz的类别
foreach yDy\in{D} do
计算d(y,z)d(y,z),即yyzz的距离;
end
从数据集DD中选出子集NN,其中NN包含KK个距离zz最近的训练对象
cz=argmaxvLyNI(v=class(cy)) c_z={argmax}_{v\in{L}}\sum_{y\in{N}}\mathbb{I}(v=class(c_y))
其中,I(.)\mathbb{I}(.)是一个指示函数,当内部的表达式取值为TrueTrue就返回值为11,否则返回00.
———————————————————————————————————

四、KNN的距离度量方式

这里的距离度量方式也是一个重要的因素,通常会使用欧氏距离或者曼哈顿距离
对于给定的具有nn个属性的两点xxyy,欧式距离和曼哈顿距离公式如下:
欧氏距离:
d(x,y)=k=1n(xkyk)2 d(x,y)=\sqrt{\sum_{k=1}^{n}(x_k-y_k)^2}
曼哈顿距离:
d(x,y)=k=1nxkyk d(x,y)=\sqrt{\sum_{k=1}^{n}\vert{x_k-y_k\vert}}
下图是分别给出不同尺度的KK进行最近邻分类:
K近邻算法(KNN)原理探讨
这样看来,算法KK值的大小对分类结果有着重大的影响。当选择的 KK值较小的情况下,就相当于用较小的邻域中的训练实例进行预测,只有当与输入实例较近的训练实例才会对预测结果起作用。但与此同时预测结果会对实例点非常敏感,分类器抗噪能力较差,因而容易产生过拟合,所以一般而言KK值的选择不宜过小。但如果选择较大的 KK值,就相当于在用较大邻域中的训练实例进行预测,但相应的分类误差也会增大,模型整体变得简单,会产生一定程度的欠拟合。所以一般而言,我们需要采用交叉验证的方式来选择合适的 KK值。

相关文章: