向量检索算法综述

目录

1. 基于树的搜索

2. 基于哈希的空间划分

3. 基于图的搜索

3.1 朴素想法

3.2 NSW

3.3 HNSW

3.4 小结

4. 基于量化的编码

4.1 SQ和PQ

4.2 IVFPQ

4.3 小结

5 总结

Reference


大数据时代的到来,海量数据的迸发,使得向量检索应用日益广泛,诸如图文推荐,视频推荐,音乐推荐,文章去重,以图搜图等等。而这些应用的普遍特征是数据量大,维度高。因此精确的线性的暴力搜索无法满足速度,甚至存储要求。而近邻搜索(Approximately Nearest Neighbor Search)由此登上历史舞台,展现其光辉的一面。

近邻搜索,用一句话概括其原则:尽可能减小查询向量的搜索范围,从而提高查询速度。目前业界的近邻搜索算法主要分为四类,本文对每个类别选取典型的算法予以介绍。

  • 基于树的搜索(Annoy, KD-Tree)
  • 基于哈希的空间划分(LSH)
  • 基于图的搜索(NSW,HNSW)
  • 基于量化的编码(SQ,PQ)

1. 基于树的搜索

基于树的方法采用树的结构来表示对空间的划分,KD-Tree和Annoy是比较有代表性的两种算法。KD-Tree每一次分割选取方差最大的维度,在该维度上进行分割。

本文以Annoy为例对基于树的搜索进行详细阐述。

Annoy 是Spotify用于音乐推荐的向量检索算法库,在github上开源。

Annoy不断地用超平面分割向量空间,直到每个子空间的向量数量低于指定数量。而这个不断地分割过程就像二叉树的父节点到左右子节点的过程。而这个超平面,使用KMeans(k=2)对需要分类的向量进行聚类,得到两个质心,质心连线的法平面即为该超平面。

image

image

image

 如此...直到: 

image

整个过程类似如下的二叉树:

image

而对于向量的查询,则是从根节点开始遍历,当遍历到某个节点,其子节点小于指定查找数目时停止搜索。

这样的查找有几个问题。第一,走到某一个节点,其包含的向量数少于我们要查询的近邻数。第二,可能有的相邻较近的节点被分到了不同的子节点,从而影响搜索精度。

对于第一点ÿ

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Matlab支持向量算法是一种非常强大的机器学习算法,适用于分类、回归和异常检测等任务。Matlab中的支持向量算法实现了多种核函数,可以处理非线性问题。以下是Matlab支持向量算法的主要步骤: 1. 数据准备:将数据集分为训练集和测试集,并对数据进行归一化处理。 2. 模型选择:选择支持向量算法的类型和核函数类型,以及其他参数。 3. 模型训练:使用训练集训练支持向量机模型,得到模型的参数。 4. 模型测试:使用测试集测试模型的性能,并计算模型的准确率、精确率和召回率等指标。 5. 模型优化:根据测试结果调整模型参数,提高模型的性能。 Matlab支持向量算法可以使用SVM函数实现,该函数提供了训练和测试支持向量机模型所需的所有功能。以下是Matlab中使用支持向量算法实现分类的示例代码: % 准备数据 load fisheriris X = meas(:,3:4); Y = species; % 划分训练集和测试集 cv = cvpartition(Y,'Holdout',0.3); Xtrain = X(training(cv),:); Ytrain = Y(training(cv),:); Xtest = X(test(cv),:); Ytest = Y(test(cv),:); % 训练支持向量机模型 SVMmodel = fitcsvm(Xtrain,Ytrain,'KernelFunction','rbf','Standardize',true); % 测试模型 Ypred = predict(SVMmodel,Xtest); % 计算准确率 accuracy = sum(Ypred==Ytest)/numel(Ytest); 以上代码使用了径向基核函数(rbf)训练了一个支持向量机模型,并使用测试集计算了模型的准确率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jevenabc

请我喝杯咖啡吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值