zoukankan      html  css  js  c++  java
  • K近邻法

    k-NN是一种基本分类回归方法。k近邻法输出为实例类别,可以取多类

    k-NN假定给定一个训练集,其中的实例类别已定。分类时,对于新实例,根据其k个最近邻的训练实例的类别,通过多数表决等方式预测。因此,k-NN不具有显式的学习过程

    (k)的选择、距离度量及分类决策规则(如多数表决)是k-NN的三个基本要素

    k-NN使用的模型实际上对应于对特征空间的划分。当训练集、距离度量、k值和分类决策规则确定后,对于任何一个新的输入实例,它所属的类唯一的确定。

    K值的选择

    • k值的减小:
      • 减小“近似误差”,增大“估计误差”
      • 整体模型变得复杂,临近点如果恰好是噪声,容易发生过拟合
    • k值增大:
      • 减小“估计误差”,增大“近似误差”
      • 整体模型变得简单,容易欠拟合
      • 极端情况(k=N)
    • 取一个比较小的数值,通常采用交叉验证法来选取最优的(k)

    k-NN的实现:kd树

    线性扫描:计算输入实例与每一个训练实例的距离,计算量太大

    构造kd树

    kd树是一种对k维空间中的实例点进行存储以便对其进行快速搜索的树形数据结构。kd树是二叉树,表示对k维空间的一个划分。构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。kd树的每个节点对应于一个k维超矩形区域。

    构造平衡kd树

    平衡kd树(中位数作为切分点)不一定是搜索效率最优的

    • 输入:数据集T,其中(x_i=(x^{(1),cdots,x^{(k)}})^T)
    • 输出:kd树
      1. 开始:构造根节点,根节点对应于包含(T)的k维空间的超矩形区域。选择(x^{(1)})为坐标轴,以(T)中所有的实例的(x^{(1)})坐标的中位数为且分点,将根节点对应的超矩形区域切分为左右两个子区域。将落在切分超平面上的点保存在根节点。
      2. 对深度为(j)的节点,选择(x^{(l)})作为切分坐标轴,(l=j(mod k)+1)(依次选取各坐标轴),取该坐标轴实例的中位数作为切分点,继续切分。
      3. 直到两个子区域没有实例存在时停止,从而形成kd树的区域划分

    搜索kd树

    kd树的最近邻搜索算法:

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

    如果实例点是随机分布的,kd树搜索的平均复杂度为(O(log N))(N)为训练样本数。kd树适合训练实例数远大于空间维数的情况。当空间维数接近实例数时,效率接近线性扫描

  • 相关阅读:
    嵌入式 coredump
    CentOS7 systemctrl管理的服务,open files的神坑
    Linux 服务器网络流量查看工具
    shiro源码篇
    google guava
    Docker虚拟化管理:30分钟教你学会用Docker
    Shiro结合Redis实现分布式或集群环境下的Session共享
    Springboot整合redis
    Git分支操作方法
    Redis启动和在注册到windows服务
  • 原文地址:https://www.cnblogs.com/weilonghu/p/11922334.html
Copyright © 2011-2022 走看看