统计学习方法第三章:k近邻法

来源:互联网 发布:tfboys官方周边淘宝店 编辑:程序博客网 时间:2024/05/16 15:35
  • 直观解释:给定一个训练数据集,对于新的输入示例,在训练集中找到与该实例最邻近的k个示例,这k个实例的多数属于某个类,就把该输入示例分为这个类。
  • k近邻学习算法:
    • 输入:训练数据集
      T={(x1,y1)..(xi,yi)..(xN,yN)}

      其中xi是实例的特征向量,yi={c1.c2...cK}为实例的类别,i=1,2,3...N
    • 输出:实例x所属的类y.
    • 步骤:
      1. 根据给定的距离度量,在训练集T中中找出与x最邻近的k个点,涵盖这k点的x邻域记作Nk(x);
      2. Nk(x)中根据分类决策原则(如多数表决)决定x的类别y:
        y=arg maxcjxiNk(x)I(yi=cj),i=1,2..N;j=1,2..K
        其中I为指示函数,即当yi=cjI为1,否则为0.
    • k=1时被称为最近邻算法,对于输入的实例点x,将从数据集中选取与x最邻近的点的类作为x的类.
  • 模型:
    • 对于每个训练实例点xi,距离该点比其他店更近的所有点组成一个区域,叫做单元(cell).所有实例点的单元构成了对特征空间的一个划分。最近邻法将实例xi的类yi作为其单元中所有点的类标记(class label).
  • 距离度量:一般使用欧氏距离,但也可以用Lp距离或者Minkowski距离.
    • xi,yiLp距离定义为
      Lp(xi,xj)=(l=1n|x(l)ix(l)j|p)1p

      p1,当p=2时就成为欧氏距离。
  • 分类决策规则:如果分类的损失函数为0-1损失函数,分类函数为
    f:Rn{c1,c2...,ck}
    那么误分类的概率为
    P(Yf(X))=1P(Y=f(X))
    误分类率为
    1kxiNk(x)I(yicj)=11kxiNk(x)I(yi=cj)
    即多数表决=误分类率最小=经验风险最小
  • k值的选择:
    • k较小相当于用较小的邻域中的训练实例进行预测,只有与输入实例较近的训练实例才会对预测结果起作用;缺点是如果邻近点是噪声的话预测会错,即k值较小容易过拟合。
    • k较大的话优点是减小学习的估计误差,缺点是近似误差会增大,这时与输入实例较远(不相似)的训练实例也会对预测起作用,导致错误。
    • 一般在应用中k的取值比较小.
  • kd树:
    • kd树是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构,是一种二叉树,表示对k维空间的一个划分,kd树的每个节点对应于一个k维超矩形区域。
    • 如何构造kd树:
      1. 开始:构造根节点,根节点对应于包含数据集T的k维空间的超矩形区域;
      2. 选择x(l)为坐标轴,以T中所有实例的x(l)坐标的中位数为切分点,划分为2个区域,切分由通过切分点并且与坐标轴x(l)垂直的超平面实现,由根节点生成深度为1的左右子节点,将罗庵子切分面上的点保存在根节点;
      3. 重复:对深度为j的节点,选择x(l)为坐标轴,l=j(mod k)+1,以该节点的区域中所有实例的x(l)坐标的中位数为切分点进行切分,生成深度为j+1的子节点;
      4. 知道两个子区域没有实例存在时停止。
    • 如何用kd树进行搜索:
      1. 在kd书中找出包含目标节点x的叶节点:从根节点出发,递归的向下访问,若目标点x当前维的坐标小于切分点的坐标,则移动到左节点,否则反之,直到子节点为叶节点;
      2. 以此叶节点为当前最近点,递归向上回退,在每个节点进行以下操作:
        • 如果该节点保存的实例点比当前最近点距离目标点更近,则更换当前最近点为该节点;
        • 当前最近点一定存在于该节点一个子节点对应的区域,检查该子节点的父节点的另一个子节点对应的区域是否有更近的点
        • 当回退到根节点时,搜索结束,最后的当前最近点即为最近点。
      3. 平均计算复杂度为O(logN)
0 0