k近邻法 (k-nearest neighbor, k-NN)

k近邻法 (k-nearest neighbor, k-NN)

  • Cover与Hart
    • 1968年提出 k k k近邻法
  • Abstract
    • k k k近邻法假设给定一个训练数据集,其中的实例类别已定,分类时,对新的实例,根据其 k k k个最近邻的训练实例类别,通过多数表决等方式进行预测
  • k k k近邻算法 (k-nearest neighbor algorithm)
    • 训练数据集
      • 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 \rm\subseteq R^n xiXRn, i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,,N, 为实例的特征向量
      • y i ∈ Y = { c 1 , c 2 , ⋯   , c K } y_i\in Y\rm =\{c_1,c_2,\cdots,c_K\} yiY={c1,c2,,cK}, 为实例的类别
    • (1) 根据给定的距离度量
      • 在训练集 T T T中找出与 x x x最邻近的 k k k个点
      • 涵盖这 k k k个点的 x x x的邻域记作 N k ( x ) N_k(x) Nk(x)
    • (2) 在 N k ( x ) N_k(x) Nk(x)中根据分类决策规则决定 x x x的类别 y y y, (多数表决)
      • y = a r g max ⁡ c j ∑ x i ∈ N k ( x ) I ( y i = c j ) y=arg\max\limits_{c_j}\sum\limits_{x_i\in N_k(x)}I(y_i=c_j) y=argcjmaxxiNk(x)I(yi=cj)
      • i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,,N, j = 1 , 2 , ⋯   , K j=1,2,\cdots,K j=1,2,,K
      • I I I为指示函数
        • y i = c j y_i=c_j yi=cj I I I为1
        • y i ≠ c j y_i\not=c_j yi=cj I I I为0
    • 最近邻算法
      • k k k近邻法的特殊情况是 k = 1 k=1 k=1
      • 最近邻算法将训练数据集中与 x x x最邻近的类作为 x x x的类
  • k k k近邻模型
    • 模型由三个基本要素构成
      • 距离度量
      • k k k值得选择
      • 分类决策规则
    • 距离度量
      • 设特征空间$ X 是 是 n 维 实 数 向 量 空 间 维实数向量空间 R^n$, x i , x j ∈ X x_i,x_j\in X xi,xjX
        • x i = ( x i ( 1 ) , x i ( 2 ) , ⋯   , x i ( n ) ) T x_i=(x_i^{(1)},x_i^{(2)},\cdots,x_i^{(n)})^T xi=(xi(1),xi(2),,xi(n))T
        • x j = ( x j ( 1 ) , x j ( 2 ) , ⋯   , x j ( n ) ) T x_j=(x_j^{(1)},x_j^{(2)},\cdots,x_j^{(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\limits_{l=1}^n|x_i^{(l)}-x_j^{(l)}|^p)^{\frac{1}{p}} Lp(xi,xj)=(l=1nxi(l)xj(l)p)p1
      • 欧氏距离(Euclidean distance)
        • 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\limits_{l=1}^n|x_i^{(l)}-x_j^{(l)}|^2)^{\frac{1}{2}} L2(xi,xj)=(l=1nxi(l)xj(l)2)21
      • 曼哈顿距离(Manhattan distance)
        • 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\limits_{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 ) = max ⁡ l ∣ x i ( l ) − x j ( l ) ∣ L_{\infty}(x_i,x_j)=\max\limits_l|x_i^{(l)}-x_j^{(l)}| L(xi,xj)=lmaxxi(l)xj(l)
    • k k k值得选择
      • k k k值的减小就意味着整体模型变得复杂,容易发生过拟合
      • k k k值的增大就意味着整体模型变得简单
      • k k k值一般取一个比较小的数值,采用交叉验证法来选取最优的 k k k
    • 分类决策规则
      • 多数表决规则(majority voting rule)
        • 如果分类的损失函数为 0 − 1 0-1 01损失函数
          • 分类函数为
            • f : R n → { c 1 , c 2 , ⋯   , c K } f:R^n\rightarrow\{c_1,c_2,\cdots,c_K\} f:Rn{c1,c2,,cK}
          • 误分类的概率为
            • P ( Y ≠ f ( X ) ) = 1 − P ( Y = f ( X ) ) P(Y\not=f(X))=1-P(Y=f(X)) P(Y=f(X))=1P(Y=f(X))
        • 对给定实例 x ∈ X x\in X xX,其最近邻的 k k 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 ) \frac{1}{k}\sum\limits_{x_i\in N_k(x)}I(y_i\not=c_j)=1-\frac{1}{k}\sum\limits_{x_i\in N_k(x)}I(y_i=c_j) k1xiNk(x)I(yi=cj)=1k1xiNk(x)I(yi=cj)
        • 要使误分类率最小即经验风险最小,就要使 ∑ x i ∈ N k ( x ) I ( y i = c j ) \sum\limits_{x_i\in N_k(x)}I(y_i=c_j) xiNk(x)I(yi=cj)最大
          • 多数表决规则等价于经验风险最小化
    • k d kd kd树 ( k d kd kd tree)
      • 使用特殊结构存储训练数据,以减少计算距离的次数
      • k d kd kd树是一种对 k k k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构, k d kd kd树是二叉树,表示对 k k k维空间的一个划分(partition)
      • 平衡 k d kd kd
        • k k 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 x_i=(x_i^{(1)},x_i^{(2)},\cdots,x_i^{(k)})^T xi=(xi(1),xi(2),,xi(k))T, i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,,N
        • (1) 构造根结点,根结点对应于包含T的k维空间的超矩形区域
          • 选择 x ( 1 ) x^{(1)} x(1)为坐标轴,以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 k)+1 lj(modk)+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) 直到两个子区域没有实例存在时停止
      • 搜索 k d kd kd
        • k d kd kd树的最近邻搜索
          • (1) 在 k d kd kd树中找出包含目标点x的叶结点
            • 从根结点出发,递归地向下访问 k d kd kd
            • 若目标点 x x x当前维的坐标小于切分点的坐标
              • 则移动到左子结点
              • 否则移动到右子结点
            • 直到子结点为叶结点为止
          • (2) 以此叶结点为"当前最近点"
          • (3) 递归地向上回退,在每个结点进行以下操作:
            • (a)如果该结点保存的实例点比当前最近点距离目标点更近
              • 则以该实例点为"当前最近点"
            • (b)当前最近点一定存在于该结点一个子结点对应的区域
              • 检查该子结点的父结点的另一子结点对应的区域是否有更近的点
                • 具体地,检查另一子结点对应的区域是否与以目标点为球心,以目标点与"当前最近点"间的距离为半径的超球体相交
                • 如果相交,可能在另一个子结点对应的区域内存在距目标点更近的点
                • 移动到另一个子结点,递归地进行最近邻搜索
                • 如果不相交则向上回退
          • (4)当回退到根结点时,搜索结束
            • 最后的"当前最近点"即为 x x x的最近邻点

参考书籍

  • 统计学习方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值