KNN(K-nearest neighbor)是一种可用作分类与回归的算法,由Cover和Hart于1968年提出。
算法输入为实例的特征向量,可以当做特征空间的一个点,目标是为这个实例确定一个类别,可取多个类别。
算法基于这样一个假设,给定一个训练集并且其中的每个实例的类别已知。当新的实例到来时,根据距离度量方式从训练集中选出k个最相近的实例的类别,然后根据多数投票方式决定新的实例的类别。
k,距离度量以及分类决策规则是该算法的三个基本要素。
1.算法概述
输入:训练集
xi(i=1,2,3…n) ∈ X ⊆ R n是实例的特征向量,yi(i=1,2,3…n) ∈ Y={c1,c2,c3,…,ck}是实例的类别,
输入特征向量x;
输出:x的类别y;
(1)根据距离度量公式,在训练集Train中找出与x最相近的k个实例,这k个实例构成了x的一个领域Nk(x);
(2)根据分类决策规则决定x的类别y(如多数投票);
I(yi=cj)是个指示函数,当两者相同时I=1,否则I=0;
2.算法模型
算法其实是根据三要素对特征空间进行了划分,分为一个个的子空间;
对于训练集中的每个点xi,距离该点比距离其他点更近的所有点组成该点的一个领域,每个训练集中的点有一个领域,所有训练集中点的领域构成对特征空间的一个划分。
2.1 距离度量
假设实例位于n维的特征空间中
Lp距离定义为:
p>=1, 当p=2时,为欧式距离;
p=1时, 为曼哈顿距离(街区距离);
当p= ∞ 时,为各个坐标距离的最大值,即
2.2 k的选择
当k选较小的值时,近似误差较小,但估计误差会增大( 近似误差判断的是新实例点和训练实例点是否相似,越近表示越相似;估计误差表示新实例点的判断错误可能性大不大,参考的训练实例点越少表示估计误差越大),此时只有与输入较近的点才会对分类起作用,容易受到噪音数据点的影响,k越小,模型越复杂,也更容易发生过拟合。
k值一般取比较小的值,可以通过交叉验证来选取最优k值。
2.3 分类决策规则
knn中分类决策规则大多是多数投票,及有k个最近邻的多数类别决定输入实例的类。
假设损失函数为0-1损失函数,分类函数为f(X),则误分率为:
对于实例x的k近邻构成的邻域N k(x),若涵盖该邻域的类别为cj,则误分率为:
要使误分率最小,则应使