机器学习理论《统计学习方法》学习笔记:第三章 k近邻法

机器学习理论《统计学习方法》学习笔记:第三章 k近邻法

  • 3 k近邻法
    • 3.1 K近邻算法
    • 3.2 K近邻模型
      • 3.2.1 模型
      • 3.2.2 距离度量
      • 3.2.3 K值的选择
      • 3.2.4 分类决策规则
    • 3.3 K近邻法的实现:kd树
      • 3.3.1 构造kd树
      • 3.3.2 搜索kd树
    • 本章概要

3 k近邻法

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

3.1 K近邻算法

  • K近邻算法简单、直观:给定一个训练数据集,对新的输入实例,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分为这个类。

K近邻法
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} T={(x1,y1),(x2,y2),,(xN,yN)},其中 x i ∈ X ⊆ R n x_i\in X \subseteq R^n xiXRn,为实例的特征向量, y i ∈ Y = { c 1 , c 2 , ⋯   , c k } y_i\in Y=\{c_1,c_2,\cdots,c_k\} yiY={c1,c2,,ck}为实例的类别, i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,,N;实例特征向量x。
输出:实例x所属的类y。
(1)根据给定的距离度量,在训练集 T T T 中找出与x最邻近的K个点,涵盖这K个点的x的领域记作 N k ( x ) N_k(x) Nk(x).
(2)在 N k ( x ) N_k(x) Nk(x)中根据分类决策规则(如多数表决)决定x的类别y: y = a r g   m a x c j ∑ x i ∈ N k ( x ) I ( y i = c j ) , i = 1 , 2 , ⋯   , N ; j = 1 , 2 , ⋯   , K y=arg\space max_{c_j}\sum_{x_i\in N_k(x)}I(y_i=c_j),i=1,2,\cdots,N;j=1,2,\cdots,K y=arg maxcjxiNk(x)I(yi=cj),i=1,2,,N;j=1,2,,K, I I I为指示函数,即当 y i = c j y_i=c_j yi=cj I I I为1,否则 I I I 0 0 0.

  • K近邻法的特殊情况是 k = 1 k=1 k=1的情形,称为最近邻算法。对于输入的实例点(特征向量)x,最近邻法将训练数据集中与x最邻近点的类作为x的类。
  • K近邻法没有显式的学习过程。

3.2 K近邻模型

K近邻法使用的模型实际上对应于特征空间的划分,模型由三个基本要素:距离度量、K值得选择、分类决策规则决定。

3.2.1 模型

  • K近邻法中,当训练集、距离度量(如欧式距离)、K值及分类决策规则(如多数表决)确定后,对于任何一个新的输入实例,它所属的类唯一的确定。这相当于根据上述要素将特征空间划分为一些子空间,确定子空间里每个点所属的类。
  • 特征空间中,对每个训练实例点 x i x_i xi,距离该点比其他点更近的所有点组成的一个区域,叫做单元(cell)。每个训练实例点拥有一个单元,所有训练实例点的单元构成对特征空间的一个划分。最近邻法将实例 x i x_i xi的类 y i y_i yi作为其单元中所有点的类标记(Class Label)。这样,每个单元的实例点的类别是确定的。
  • K近邻法的模型对应特征空间的一个划分。
    机器学习理论《统计学习方法》学习笔记:第三章 k近邻法_第1张图片

3.2.2 距离度量

  • 特征空间中两个实例点的距离是两个实例点相似度的反映。K近邻模型的特征空间一般是n为实数向量空间 R n R^n Rn。使用的距离是欧式距离,也可以是其他距离,如更一般的 L p L_p Lp距离或者Minkowshi距离。
  • 设特征空间 X X X是n维实数向量空间 R n R^n Rn, x i , x j ∈ X , x i = ( x i ( 1 ) , x i ( 2 ) , ⋯   , x i ( n ) ) T , x j = ( x j ( 1 ) , x j ( 2 ) , ⋯   , x j ( n ) ) T x_i,x_j\in X,x_i=(x_i^{(1)},x_i^{(2)},\cdots,x_i^{(n)})^T,x_j=(x_j^{(1)},x_j^{(2)},\cdots,x_j^{(n)})^T xi,xjX,xi=(xi(1),xi(2),,xi(n))T,xj=(xj(1),xj(2),,xj(n))T x i , x j x_i,x_j xi,xj L p L_p Lp的距离定义为: L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p L_p(x_i,x_j)=(\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|^p)^{1\over p} Lp(xi,xj)=(l=1nxi(l)xj(l)p)p1这里 p ≥ 1 p\ge 1 p1
  • p = 2 p=2 p=2时,称为欧式距离,即 L 2 ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ 2 ) 1 2 L_2(x_i,x_j)=(\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|^2)^{1\over 2} L2(xi,xj)=(l=1nxi(l)xj(l)2)21
  • p = 1 p=1 p=1时,称为曼哈顿距离,即 L 1 ( x i , x j ) = ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ L_1(x_i,x_j)=\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}| L1(xi,xj)=l=1nxi(l)xj(l)
  • p = ∞ p=\infty p=时,是各个坐标距离的最大值,即 L ∞ ( x i , x j ) = m a x l ∣ x i ( l ) − x j ( l ) ∣ L_{\infty}(x_i,x_j)=max_l|x_i^{(l)}-x_j^{(l)}| L(xi,xj)=maxlxi(l)xj(l)
  • 二维空间中,P不同取值时,与原点的 L p L_p Lp距离为 1 ( L p = 1 ) 1(L_p=1) 1(Lp=1)的点的图形。
    机器学习理论《统计学习方法》学习笔记:第三章 k近邻法_第2张图片

3.2.3 K值的选择

  • K值的选择对K近邻法的结果产生重大影响。
  • 如果选择较小的K值,就相当于较小的邻域中的训练实例进行预测,学习的近似误差会减小,只有与输入实例较近的(相似的)训练实例才会对预测实例起作用。但缺点是学习的估计误差会增大,预测结果会对近邻的实例点非常敏感。如果邻近的实例点恰巧是噪声,预测就会出错。换句话说,K值的减小意味着整体模型变得复杂,容易发生过拟合。
  • 如果选择较大的K值,就相当于用较大领域中的训练实例进行预测。其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时与输入实例较远的(不相似的)训练实例也会对预测起作用,使预测发生错误。K值的增大就意味着整体的模型变得简单。
  • 如果K=N,那么无论输入实例是什么,都将简单的预测它属于在训练实例中最多的类。这时,模型过于简单,完全忽略训练实例中的大量有用信息,是不可取的。
  • 在应用中,K值一般取一个比较小的数值。通常采用交叉验证法来选取最优的K值。

3.2.4 分类决策规则

  • K近邻法中的分类决策规则往往是多数表决,即由输入实例的K个邻近的训练实例中的多数类决定输入实例的类。
  • 多数表决规则有如下解释:如果分类的损失函数为0-1损失函数,分类函数为 f : R n → { c 1 , c 2 , ⋯   , c k } f:R^n\to \{c_1,c_2,\cdots,c_k\} f:Rn{c1,c2,,ck}那么误分类的概率是 P ( Y ≠ f ( X ) ) = 1 − P ( Y = f ( X ) ) P(Y\neq f(X))=1-P(Y=f(X)) P(Y=f(X))=1P(Y=f(X))对给定的实例 x ∈ X x\in X xX,其最近邻的K个训练实例点构成集合 N k ( x ) N_k(x) Nk(x).
  • 如果涵盖 N k ( x ) N_k(x) Nk(x)的区域的类别是 c j c_j cj,那么误分类率是 1 k ∑ x i ∈ N k ( x ) I ( y i ≠ c j ) = 1 − 1 k ∑ x i ∈ N k ( x ) I ( y i = c j ) {1\over k}\sum_{x_i\in {N_k(x)}}I(y_i\neq c_j)=1-{1\over k}\sum_{x_i\in {N_k(x)}}I(y_i= c_j) k1xiNk(x)I(yi=cj)=1k1xiNk(x)I(yi=cj)
    要使误分类最小即经验风险最小,就要使 1 k ∑ x i ∈ N k ( x ) I ( y i = c j ) {1\over k}\sum_{x_i\in {N_k(x)}}I(y_i= c_j) k1xiNk(x)I(yi=cj)最大,所以多数表决规则等价于经验风险最小化。

3.3 K近邻法的实现:kd树

  • 实现k近邻法时,主要考虑的问题是如何对训练数据进行快速k近邻搜索,在特征空间的维数大,及训练数据容量大时尤为重要。
  • K近邻法最简单的实现方法就是线性扫描。这时要计算输入实例与每一个实例的距离,当训练集很大时,计算非常耗时,这种方法是不可行的。
  • 为了提高K近邻搜索的效率,可以考虑使用特殊的结构存储训练数据,以减少计算距离的次数。具体方法有很多,下面介绍其中的kd树方法。

3.3.1 构造kd树

  • kd树是一种对k维空间中的实例点进行存储,以便对其进行快速检索的树形数据结构。kd树是二叉树,表示对k维空间的一个划分(partition)。构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。kd树的每个结点对应于一个k维超矩形区域。
  • 构造kd树的方法如下:构造根节点,使根节点对应于K维空间中,包含所有实例点的超矩形区域;通过下面的递归方法,不断地对K维空间进行切分,生成子结点。在超矩形区域(结点)上选择一个坐标轴和在此坐标轴上的一个切分点,确定一个超平面,这个超平面通过选定的切分点并垂直于选定的坐标轴,将当前超矩形区域切分为左右两个子区域(子结点);这时,实例被分到两个子区域,这个过程直到子区域内没有实例时终止(终止时的结点为叶结点)。在此过程中,将实例保存在相应的结点上。
  • 通常,依次选择坐标轴对空间切分,选择训练实例点在选定坐标轴上的中位数为切分点,这样得到的kd树是平衡的。注意,平衡的kd树搜索时的效率未必是最优的。

构造平衡kd树
输入:k维空间数据集 T = { x 1 , x 2 , ⋯   , x N } T=\{x_1,x_2,\cdots,x_N\} T={x1,x2,,xN}其中 x i = ( x i ( 1 ) , x i ( 2 ) , ⋯   , x i ( k ) ) T , i = 1 , 2 , ⋯   , N x_i=(x_i^{(1)},x_i^{(2)},\cdots,x_i^{(k)})^T,i=1,2,\cdots,N xi=(xi(1),xi(2),,xi(k))T,i=1,2,,N
输出:kd树
(1)开始:

  • 构造根结点,根结点对应于包含 T T T的k维空间的超矩形区域。
  • 选择 x ( 1 ) x^{(1)} x(1)为坐标轴,以 T T T中所有实例的 x ( 1 ) x^{(1)} x(1)坐标的中位数为切分点,将根结点对应的超矩形区域切分为两个子区域。切分由通过切分点并与坐标轴 x ( 1 ) x^{(1)} x(1)垂直的超平面实现。
  • 由根节点生成深度为1的左右子结点:左子结点对应坐标 x ( 1 ) x^{(1)} x(1)小于切分点的子区域,右子结点对应于坐标 x ( 1 ) x^{(1)} x(1)大于切分点的子区域。
  • 将落在切分超平面上的实例点保存在根结点。

(2)重复:

  • 对深度为 j j j的结点,选择 x ( l ) x^{(l)} x(l)为切分的坐标轴, l = j ( m o d   k ) + 1 l=j(mod\space k)+1 l=j(mod k)+1,以该结点的区域中所有实例的 x ( l ) x^{(l)} x(l)坐标的中位数为切分点,将该结点对应的超矩形区域切分为两个子区域。切分由通过切分点并与坐标轴 x ( l ) x^{(l)} x(l)垂直的超平面实现。
  • 由该结点生成深度为 j + 1 j+1 j+1的左、右子节点:左子结点对应坐标 x ( l ) x^{(l)} x(l)小于切分点的子区域,右子结点对应坐标 x ( l ) x^{(l)} x(l)大于切分点的子区域。

(3)直到两个子区域没有实例存在时停止。从而形成kd树的区域划分。

3.3.2 搜索kd树

如何利用kd树进行k近邻搜索?

  • 利用kd树可以省去对大部分数据点的搜索,从而减少搜索的计算量。
  • 给定一个目标点,搜索其最近邻。首先找到包含目标点的叶结点。然后从叶结点出发,依次回退到父结点,不断查找与目标点最邻近的结点,当确定不可能存在更近的结点时终止。这样的搜索就被限制在空间的局部区域上,效率大为提高。
  • 包含目标点的叶结点对应包含目标点的最小超矩形区域。以此叶结点的实例点作为当前最近点。目标点的最近邻一定在以目标点为中心,并通过当前最近点的超球体的内部。然后返回当前结点的父结点,如果父结点的另一子结点的超矩形区域与超球体相交,那么在相交的区域内寻找与目标点更接近的实例点。如果存在这样的点,将此点作为新的当前最近点。算法转到更上一级的父结点,继续上述过程。如果父结点的另一子结点的超矩形区域与超球体不相交,或不存在比当前最近点更近的点,则停止搜索。

用kd树的最近邻搜索
输入:已构造的kd树,目标点x;
输出:x的最近邻;
(1)在kd树中找出包含目标点x的叶结点:从根结点出发,递归地向下访问kd树。若目标点x当前维的坐标小于切分点的坐标,则移动到左子结点,否则移动到右子结点。直到子结点为叶结点为止。
(2)以此叶结点“当前最近点”。
(3)递归地向上回退,在每个结点进行以下操作:
(a)如果该结点保存的实例点比当前最近点距离目标更近,则以该实例点为当前最近点
(b)当前最近点一定存在于该结点一个子结点对应的区域。检查该子结点的父结点的另一子结点对应的区域是否有更近的点。具体地,检查另一子结点对应的区域是否与以目标点为球心、以目标点与当前最近点间的距离为半径的超球体相交。
如果相交,可能在另一个子结点对应的区域内存在距目标点更近的点,移动到另一个子结点。接着,递归地进行最近邻搜索。
如果不相交,向上回退。
(4)当回退到根结点时,搜索结束。最后的当前最近点即为x的最近邻点。

  • 如果实例点是随机分布的,kd树搜索的平均计算复杂度是 O ( l o g   N ) O(log\space N) O(log N),这里 N N N是训练实例数。kd树更适用于训练实例数远大于空间维数时的k近邻搜索。当空间维数接近训练实例数时,它的效率会迅速下降,几乎接近线性扫描。

本章概要

  1. k近邻法是基本且简单的分类与回归方法。k近邻法的基本做法是:对给定的训练实例点和输入实例点,首先确定输入实例点的k个最近邻训练实例点,然后利用这k个训练实例点的类的多数来预测输入实例点的类。
  2. k近邻模型对应于基于训练数据集对特征空间的一个划分。k近邻法中,当训练集、距离度量、k值及分类决策规划确定后,其结果唯一确定。
  3. k近邻法三要素:距离度量、k值的选择、分类决策规则。常用的距离度量是欧氏距离及更一般的 L p L_p Lp距离。k值小时,k近邻模型更复杂;k值大时,k近邻模型更简单。k值的选择反映了对近似误差与估计误差之间的权衡,通常由交叉验证选择最优的k。常用的分类决策规则是多数表决,对应于经验分线最小化。
  4. k近邻法的实现,需要考虑如何快速搜索k个最近邻点。kd树是一种便于对k维空间中的数据进行快速检索的数据结构。kd树是二叉树,表示对k维空间的一个划分,其每个结点对应于k维空间划分中的一个超矩形区域。利用kd树可以省去对大部分数据点的搜索,从而减少搜索的计算量。

你可能感兴趣的:(算法,人工智能,深度学习,机器学习)