zoukankan      html  css  js  c++  java
  • KD 树总结

    相似向量的召回是推荐系统中召回阶段中非常重要的一个步骤,便利所有向量的召回方法性能太差,KD树先对向量空间进行了切分,只需要检索部分向量空间就可以获得检索结果,大大加快了检索效率。

    如果实例点是随机分布的,kd树的时间复杂度是O(logN)

    KD 树的构造

    1. 选择切分向量空间的维度,常用的有两种方法:

    (1)按顺序选择切分维度,第一次选第1维,第二次选择2维,第n次选择n%k维,k维向量总维度

    (2)寻找方差最大的维度(每个维度选择次数要一致)

    2. 选择切分节点,一半是把该维度数据中位数作为父节点,小于该节点的落入左子树,大于该节点的落入右子树

    重复上面1,2步,直到叶子节点只包含一个实例

    例子

     

    KD树检索方法

    1. 输入一个查询节点,首先在KD树中找到包含该节点的叶子节点

    2. 以此叶节点作为“当前最近节点”

    3. 递归的进行以下操作:

      a. 回退到父节点,如果该节点保存的实例点比当前最近点距离目标更近,这更新当前最近点为该节点。

      b. 判断该节点的另一个子节点对应的区域是否和以查询点为球心,以查询点和当前最近点之间的距离为半径的超球体相交。如果相交,可能在该子节点内存在距查询点更近的节点,需要进入该子节点检索。否者继续向上回退。

      c. 当回退到根节点时检索结束。

    例子

  • 相关阅读:
    spring boot.定时任务问题记录(TaskScheduler/ScheduledExecutorService异常)
    网站配置https(腾讯云域名操作)
    Java web如何定位工程路径
    centos7安装nginx
    个人博客搭建----基于solo
    velocity学习总结
    第四篇:用IntelliJ IDEA 搭建基于jersey的RESTful api
    Python 包批量升级
    Linux 常用命令更新汇总
    ubuntu 18.04 +firefox + selenium + python
  • 原文地址:https://www.cnblogs.com/xumaomao/p/15026769.html
Copyright © 2011-2022 走看看