第三章k近邻法

  k近邻法(KNN)是一种基本分类和回归方法。k近邻法的输入为实例的特征向量,对应于特征空间中的点;输出为实例的类别,可以取多类。k近邻法假设给定一个训练数据集,其中的实例类别已定。分类时候,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决等方式进行预测。因此,k近邻法不具有显式的学习过程。k近邻法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。k值的选择、距离度量及分类决策规则是k近邻法的三个要素。

3.1k近邻算法
算法3.1(k近邻法)
输入:训练数据集 T={(x1,y1),(x2,y2),...,(xN,yN)} ,其中xi是实例的特征向量,yi是实例的类别;实例特征向量x;
输出:实例x所属的类y。
(1)根据给定的距离度量,在训练集T中找出与x最邻近的k个点,涵盖着k个点的x的邻域记作 Nk(x)
(2)在 Nk(x) 中根据分类决策规则(如多数表决)决定x的类别y。
k近邻法的特殊情况是k=1的情形,称为最近邻算法。对于输入的实例点(特征向量)x,最近邻法将训练数据集中与x最邻近点的类作为x的类。

3.2k近邻模型
距离度量:设特征空间是n维是实数向量空间 Rn xi,xjX xi=(x(1)i,x(2)i,...,x(n)i)T xj=(x(1)j,x(2)j,...,x(n)j)T ,xi,xj的Lp距离定义为 Lp(xi,xj)=(l=1nxlixljp)1p
(1)当p=2时候,称为欧氏距离
(2)当p=1时候,称为曼哈顿距离
(3)当p=无穷大的时候,它是各个坐标距离的最大值,即 L(xi,xj)=maxlxlixlj

k值的选择
  k值的选择会对k近邻法的结果产生重大影响。
  如果选取较小的k值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差会减小,只有与输入实例较近的(相似的)训练实例才对预测结果起作用,但缺点是“学习”的估计误差会增大,预测结果会对近邻的实例点非常敏感。如果临近的实例点恰好是噪声,预测就会出错。换句话说,k值的减小意味着整体模型变得复杂,容易发生过拟合。
  近似误差可以理解为模型估计值与实际值之间的差距。估计误差可以理解为模型的估计系数与实际系数之间的差距。
  在k临近法中其实设定的k值越小,得到的模型是越复杂的,因为k值越小会导致特征空间被划分成更多的子空间(可以理解为模型的项越多)。而k值越大得到的模型其实是越简单的,所以当k值越小,对于训练集的预测更加精确,近似误差会越小。当k值越大,对于训练集的预测不会那么准确,所以近似误差会越大。
  如果选择较大的k值,就相当于用较大邻域中的训练实例进行预测。其优点是可以减少学习的估计误差。但缺点是学习的近似误差会增大。这时与输入实例较远的(不相似的)训练实例也会对预测起作用,使得预测发生错误。k值的增大意味着整体模型变得简单。
  如果k=N,那么无论输入实例是什么,都将简单地预测它属于在训练实例中最多的类。这时,模型过于简单,完全忽略训练实例中的大量有用信息,是可取的。
  在应用中,k值一般取一个比较小的数值。通常采用交叉验证法来选取最优k值。

分类决策规则
  k近邻法中的分类决策规则往往是多数表决,即由输入实例的k个邻近的训练实例中的多数类决定输入实例的类。多数表决规则等价于经验风险最小化。

3.3k近邻法的实现:kd树

猜你喜欢

转载自blog.csdn.net/Heloiselt/article/details/80092893