算法笔记 近似最近邻查找(Approximate Nearest Neighbor Search,ANN)

news2024/11/17 21:18:54

1 介绍

  • 精准最近邻搜索中数据维度一般较低,所以会采用穷举搜索,即在数据库中依次计算其中样本与所查询数据之间的距离,抽取出所计算出来的距离最小的样本即为所要查找的最近邻。
    • 当数据量非常大的时候,搜索效率急剧下降。
    • ——>近似最近邻查找(Approximate Nearest Neighbor Search,简称 ANN)是一种在大规模数据集中查找与给定查询点最相似(或“最近”)的数据点的优化算法。
  • 与精确最近邻查找不同,近似最近邻查找不保证找到绝对最近的邻居,但它通常比精确方法更快,尤其是在高维数据空间中。
    • 在牺牲可接受范围内的精度的情况下提高检索效率
  • 近似最近邻检索利用数据量增大后数据之间会形成簇状聚集分布的特性,通过对数据分析聚类的方法对数据库中的数据进行分类或编码,对于目标数据根据其数据特征预测其所属的数据类别,返回类别中的部分或全部作为检索结果。

2 KD 树

算法笔记:KD树_UQI-LIUWJ的博客-CSDN博客

3 球树

算法笔记:球树_UQI-LIUWJ的博客-CSDN博客

  • KD树和球树通常用于精确最近邻查找,但也可以用于近似最近邻查找
    • 限制搜索深度

      • 在构建KD树/球树的过程中,每个节点都会分割其包含的数据点。在查找最近邻时,通常会遍历这些节点以找到最近的点
      • 通过限制搜索深度,可以减少搜索时间,但这可能会导致找到的点不是真正的最近邻
    • 早停准则

      • 在搜索过程中,一旦找到一个与查询点距离在某个阈值范围内的点,就停止搜索。

      • 这样可以加速查找过程,但可能会错过更近的点。

4 LSH 局部敏感哈希(locality-sensitive hashing)

  • LSH的基本思想是将相近的点映射到相同或相近的“桶”(bucket)中,以便能快速地检索这些点。

4.1 几个概念

  • 哈希函数族:

    • 选择一个局部敏感的哈希函数族,该函数族具有一个重要的性质:距离近的点被哈希到相同桶的概率高,而距离远的点被哈希到相同桶的概率低。
  • 局部敏感

    • 一个局部敏感的哈希函数族 H 对于任意两个点 p 和 q,以及任意两个距离阈值 R 和 r(R>r),具有以下性质
      • 正性质: 如果 distance(p,q)≤r,则 h(p)=h(q) 的概率较高。

        • 也就是说,如果两个点 p 和 q 距离很近,那么它们被哈希到同一个桶的概率应该很高。

      • 负性质: 如果distance(p,q)≥R,则 h(p)=h(q) 的概率较低。

        • 也就是说,如果两个点 p 和 q 距离很远,那么它们被哈希到同一个桶的概率应该很低。

  • 多哈希表:

    • 通常使用多个这样的哈希表,以增加查找精度。
  • 候选集生成:

    • 对于一个查询点,首先计算其哈希值,并在相应的桶中查找候选点。
  • 后处理:

    • 在候选集中进行距离计算,以找到最近邻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/972395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公共实训中心物联网技术应用实训室建设方案

一、概述 1.1专业背景 物联网(Internet of Things)被称为继计算机、互联网之后世界信息产业第三次浪潮,它并非一个全新的技术领域,而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升,是随着传感网、通…

百度低质量站点怎么办?解决百度低质量站点的方法和工具

百度低质量站点怎么恢复?这是许多网站主和运营人员在SEO优化过程中经常面临的一个问题。百度作为中国最大的搜索引擎,对于网站收录和排名具有至关重要的影响。然而,由于各种原因,有些网站可能面临被百度降权或收录减少的情况。那么…

Netty服务端启动的整体流程-基于源码4.1.96Final分析

Netty采用的是主从Reactor多线程的模型,参考Scalable IO in Java,但netty的subReactor为一个组 一、从FileServer服务器示例入手 public final class FileServer {static final boolean SSL System.getProperty("ssl") ! null;// Use the …

RHCA之路---EX280(4)

RHCA之路—EX280(4) 1. 题目 Use the S2I functionality of your OpenShift instance to build an application in the rome project Use the Git repository at http://services.lab.example.com/php-helloworld for the application source Use the Docker image labeled re…

栈(Stack)的详解

目录 1.栈的概念 2.栈的模拟实现 1.栈的方法 2.模拟栈用(整型)数组的形式呈现 2.1栈的创建 2.2压栈 2.3栈是否为空 2.4出栈 2.5获取栈中有效元素个数 2.6获取栈顶元素 2.7完整代码实现 1.栈的概念 从上图中可以看到, Stack 继承了…

vite+vue3+element-plus

vitevue3element-plus 1.开始 npm create vitelatest app -- --template vuenpm installlnpm run dev2.引入element-ui npm install element-plus修改main.js import ElementPlus from element-plus import element-plus/dist/index.css createApp(App).use(ElementPlus).m…

剑指 Offer 65. 不用加减乘除做加法(简单)

题目: class Solution { public:int add(int a, int b) {while(b){ //总体思路:每一次加法器结果a上一次产生的进位数*进制数本位数,进制数为0的时候直接返回本位数a即可int carry a&b; //计算进位a a^b; //计算…

NC后端扩展开发

前言 在日常的工作中,会遇到各种各样的需要进行扩展开发的需求,可以使用系统预留的扩展开发机制来实现,避免修改源码。因NC产品已迭代至BIP版本,所以前端扩展方式就再进行不赘述了,本文主要介绍后端扩展开发方式&…

docker使用(二)提交到dockerhub springboot制作镜像

docker使用(二) dockerhub创建账号创建存储库成功!开始推送获取image名 提交成功SpringBoot项目制作Dockerfile镜像部署打jar包 dockerhub创建账号 (自认为可以理解为github一类的东西) 单击创建存储库按钮。 设定存…

DROID-SLAM复现(服务器端复现,yaml创建env,)

环境配置 代码地址:https://github.com/princeton-vl/DROID-SLAM git 代码 官方方法,直接拉取: git clone --recursive https://github.com/princeton-vl/DROID-SLAM.git如果从github拉取很慢,可以直接从gitee上拉取同步的代码…

code阶段——gitgitlab安装

在code阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN或者Git,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。 Git安装 https://git-scm.com/(傻瓜式安装) GitLab安…

【业务功能篇97】微服务-springcloud-springboot-电商购物车模块-获取当前登录用户的购物车信息

购物车功能 一、购物车模块 1.创建cart服务 我们需要先创建一个cart的微服务&#xff0c;然后添加相关的依赖&#xff0c;设置配置&#xff0c;放开注解。 <dependencies><dependency><groupId>com.msb.mall</groupId><artifactId>mall-commo…

docker使用(一)生成,启动,更新(容器暂停,删除,再生成)

docker使用&#xff08;一&#xff09; 编写一个 Dockerfile构建镜像构建失败构建成功 运行镜像运行成功 修改代码后再次构建请不要直接进行构建&#xff0c;要将原有的旧容器删除或暂停停止成功删除成功再次构建且构建成功&#xff01; 要创建一个镜像&#xff0c;你可以按照以…

OpenCV(十八):图像直方图

目录 1.直方图统计 2.直方图均衡化 3.直方图匹配 1.直方图统计 直方图统计是一种用于分析图像或数据的统计方法&#xff0c;它通过统计每个数值或像素值的频率分布来了解数据的分布情况。 在OpenCV中&#xff0c;可以使用函数cv::calcHist()来计算图像的直方图。 calcHist(…

Docker使用数据卷挂载进行数据存储与共享

一、挂载和数据卷 在 Docker 中&#xff0c;挂载&#xff08;Mounting&#xff09;和数据卷&#xff08;Data Volumes&#xff09;是用于在容器和宿主机之间共享数据的机制。 挂载&#xff1a;将宿主机文件系统中的目录或文件与容器中的目录或文件进行关联的过程。数据卷&…

Linux系统--基础IO

文章目录 文件的概念 C语言 文件 IO 相关操作 系统调用接口 文件描述符 一、文件的概念 1.在系统角度上来说 文件内容属性 如果在磁盘上建立一个为0KB的文件&#xff0c;磁盘上也会存储文件的属性。(因为文件的属性也是数据). 文件的操作 1.一种是对于文件内容做操作。2.另…

Solidworks PDM二次开发---文件相关操作

本文介绍如何把文件增加到库&#xff0c;并检入。 上一篇文章简单的讲解了文件夹的创建等操作&#xff0c;这一次来讲文件相关操作&#xff0c;相对来说比较重要。界面 漂亮的界面&#xff0c;不接受反驳&#xff01; 代码 private void btnFile_Click(object sender, Even…

MASM32编程状态栏显示字符动画,按钮跑马灯

一、需求分析 由于sysInfo扫描的内容比较多&#xff0c;打算为它增加一点动画效果&#xff0c;提醒用户程序正在运行&#xff0c;耐心等待。 二、构建测试窗口 测试窗口上放置有一个按钮&#xff0c;按钮上的初始文字是“开始扫描”&#xff1b;并使用状态栏&#xff0c;状态…

喜报 | 再度中标南网项目!AR 开启电力远程运维新智慧

近日&#xff0c;中国南方电网官网发布《2023年南方电网数字平台科技 (广东)有限公司物资品控远程协助软件采购项目中标公告》&#xff0c;ALVA Systems 凭借 ALVA Rainbow 创新应用竞得此标。 随着相关技术的逐步成熟&#xff0c;基础问题远程化解决已经在工业领域广泛应用。 …

Python中的装饰器

迷途小书童的 Note 读完需要 5分钟 速读仅需 2 分钟 装饰器是一个非常有用而又常被误解的功能&#xff0c;可以让我们在不修改函数或类的源代码情况下给它们提供扩展功能。本文将通过具体示例带你深入理解 Python 装饰器的用法。 1 装饰器基础 装饰器本质上是一个函数&#xff…