0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

介紹當(dāng)前比較常見(jiàn)的幾種近鄰搜索算法

工程師鄧生 ? 來(lái)源:得物技術(shù) ? 作者:張林 ? 2022-09-29 17:11 ? 次閱讀

簡(jiǎn)介

隨著深度學(xué)習(xí)的發(fā)展和普及,很多非結(jié)構(gòu)數(shù)據(jù)被表示為高維向量,并通過(guò)近鄰搜索來(lái)查找,實(shí)現(xiàn)了多種場(chǎng)景的檢索需求,如人臉識(shí)別、圖片搜索、商品推薦搜索等。另一方面隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展及5G技術(shù)的普及,產(chǎn)生的數(shù)據(jù)呈爆發(fā)式增長(zhǎng),如何在海量數(shù)據(jù)中精準(zhǔn)高效的完成搜索成為一個(gè)研究熱點(diǎn),各路前輩專家提出了不同的算法,今天我們就簡(jiǎn)單聊下當(dāng)前比較常見(jiàn)的近鄰搜索算法。

主要算法

aa1d36f2-3edc-11ed-9e49-dac502259ad0.png

Kd-Tree

K-dimension tree,二叉樹(shù)結(jié)構(gòu),對(duì)數(shù)據(jù)點(diǎn)在k維空間(如二維 (x,y),三維(x,y,z),k維(x,y,z..))中劃分。

構(gòu)建過(guò)程

確定split域的值(輪詢 or 最大方差)

確定Node-data的域值(中位數(shù) or 平均值)

確定左子空間和右子空間

遞歸構(gòu)造左右子空間

查詢過(guò)程

進(jìn)行二叉搜索,找到葉子結(jié)點(diǎn)

回溯搜索路徑,進(jìn)入其他候選節(jié)點(diǎn)的子空間查詢距離更近的點(diǎn)

重復(fù)步驟2,直到搜索路徑為空

性能

理想情況下的復(fù)雜度是O(K log(N)) 最壞的情況下(當(dāng)查詢點(diǎn)的鄰域與分割超平面兩側(cè)的空間都產(chǎn)生交集時(shí),回溯的次數(shù)大大增加)的復(fù)雜度為維度比較大時(shí),直接利用K-d樹(shù)快速檢索(維數(shù)超過(guò)20)的性能急劇下降,幾乎接近線性掃描。

改進(jìn)算法

Best-Bin-First:通過(guò)設(shè)置優(yōu)先級(jí)隊(duì)列(將“查詢路徑”上的結(jié)點(diǎn)進(jìn)行排序,如按各自分割超平面與查詢點(diǎn)的距離排序)和運(yùn)行超時(shí)限定(限定搜索過(guò)的葉子節(jié)點(diǎn)樹(shù))來(lái)獲取近似的最近鄰,有效地減少回溯的次數(shù)。采用了BBF查詢機(jī)制后Kd樹(shù)便可以有效的擴(kuò)展到高維數(shù)據(jù)集上。

Randomized Kd tree:通過(guò)構(gòu)建多個(gè)不同方向上的Kd tree,在各個(gè)Kd tree上并行搜索部分?jǐn)?shù)量的節(jié)點(diǎn)來(lái)提升搜索性能(主要解決BBF算法隨著Max-search nodes增長(zhǎng),收益減小的問(wèn)題)

Hierarchical k-means trees

類似k-means tree,通過(guò)聚類的方法來(lái)建立一個(gè)二叉樹(shù)來(lái)使得每個(gè)點(diǎn)查找時(shí)間復(fù)雜度是O(log n) 。

構(gòu)建過(guò)程:

隨機(jī)選擇兩個(gè)點(diǎn),執(zhí)行k為2的聚類,用垂直于這兩個(gè)聚類中心的超平面將數(shù)據(jù)集劃分

在劃分的子空間內(nèi)進(jìn)行遞歸迭代繼續(xù)劃分,直到每個(gè)子空間最多只剩下K個(gè)數(shù)據(jù)節(jié)點(diǎn)

最終形成一個(gè)二叉樹(shù)結(jié)構(gòu)。葉子節(jié)點(diǎn)記錄原始數(shù)據(jù)節(jié)點(diǎn),中間節(jié)點(diǎn)記錄分割超平面的信息

aa7cf6fa-3edc-11ed-9e49-dac502259ad0.png

ab487b36-3edc-11ed-9e49-dac502259ad0.png

搜索過(guò)程

從根節(jié)點(diǎn)開(kāi)始比較,找到葉子節(jié)點(diǎn),同時(shí)將路徑上的節(jié)點(diǎn)記錄到優(yōu)先級(jí)隊(duì)列中

執(zhí)行回溯,從優(yōu)先級(jí)隊(duì)列中選取節(jié)點(diǎn)重新執(zhí)行查找

每次查找都將路徑中未遍歷的節(jié)點(diǎn)記錄到優(yōu)先級(jí)隊(duì)列中

當(dāng)遍歷節(jié)點(diǎn)的數(shù)目達(dá)到指定閾值時(shí)終止搜索

性能

搜索性能不是特別穩(wěn)定,在某些數(shù)據(jù)集上表現(xiàn)很好,在有些數(shù)據(jù)集上則有些差

構(gòu)建樹(shù)的時(shí)間比較長(zhǎng),可以通過(guò)設(shè)置kmeans的迭代次數(shù)來(lái)優(yōu)化

LSH

Locality-Sensitive Hashing 高維空間的兩點(diǎn)若距離很近,他們哈希值有很大概率是一樣的;若兩點(diǎn)之間的距離較遠(yuǎn),他們哈希值相同的概率會(huì)很小 。

一般會(huì)根據(jù)具體的需求來(lái)選擇滿足條件的hash函數(shù),(d1,d2,p1,p2)-sensitive 滿足下面兩個(gè)條件(D為空間距離度量,Pr表示概率):

若空間中兩點(diǎn)p和q之間的距離D(p,q)p1

若空間中兩點(diǎn)p和q之間的距離D(p,q)>d2,則Pr(h(p)=h(q))

abc4ef68-3edc-11ed-9e49-dac502259ad0.png



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • adc
    adc
    +關(guān)注

    關(guān)注

    98

    文章

    6524

    瀏覽量

    545164
  • SDC
    SDC
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    15561
  • BBF
    BBF
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    7183

原文標(biāo)題:近鄰搜索算法淺析

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    五種運(yùn)動(dòng)搜索算法簡(jiǎn)介

    (九)幀間編碼2:運(yùn)動(dòng)搜索算法簡(jiǎn)介
    發(fā)表于 07-17 15:09

    Viterbi搜索算法

    自然語(yǔ)言處理——65 Viterbi搜索算法
    發(fā)表于 04-14 11:44

    改進(jìn)的雙向啟發(fā)式搜索算法主要流程是怎樣的?

    如何對(duì)雙向啟發(fā)式搜索算法進(jìn)行改進(jìn)和實(shí)現(xiàn)?改進(jìn)的雙向啟發(fā)式搜索算法主要流程是怎樣的?
    發(fā)表于 05-17 06:51

    改進(jìn)的二進(jìn)制搜索算法原理是什么?有什么優(yōu)勢(shì)?

    改進(jìn)的二進(jìn)制搜索算法原理是什么?改進(jìn)的二進(jìn)制搜索算法有什么優(yōu)勢(shì)?
    發(fā)表于 05-20 07:12

    WebCAD中的剖面區(qū)域搜索算法

    基于Web的CAD系統(tǒng)是協(xié)同設(shè)計(jì)研究的一個(gè)分支。論文討論了矢量化標(biāo)記語(yǔ)言用于在Web上表示矢量圖形的優(yōu)點(diǎn),比較常見(jiàn)幾種剖面區(qū)域搜索算法,提出了一種不依賴操作系統(tǒng)的剖面
    發(fā)表于 07-30 16:24 ?8次下載

    四軸飛行器中的自動(dòng)搜索算法

    四軸飛行器中的自動(dòng)搜索算法,簡(jiǎn)單易懂,帶你飛起來(lái)
    發(fā)表于 06-08 14:10 ?2次下載

    一種改進(jìn)的鄰近粒子搜索算法

    一種改進(jìn)的鄰近粒子搜索算法
    發(fā)表于 01-07 20:32 ?0次下載

    一種改進(jìn)的自由搜索算法_任誠(chéng)

    一種改進(jìn)的自由搜索算法_任誠(chéng)
    發(fā)表于 03-14 17:47 ?3次下載

    DS18B20-ROM編碼的搜索算法

    DS18B20-ROM編碼的搜索算法
    發(fā)表于 05-04 08:51 ?9次下載

    深層次分類中候選類別搜索算法

    針對(duì)深層次分類中分類準(zhǔn)確率低、處理速度慢等問(wèn)題,提出一種待分類文本的候選類別搜索算法。首先,引入搜索、分類兩階段的處理思想,結(jié)合類別層次樹(shù)的結(jié)構(gòu)特點(diǎn)和類別間的相關(guān)聯(lián)系等隱含的領(lǐng)域知識(shí),進(jìn)行了類別層次
    發(fā)表于 12-05 18:07 ?0次下載
    深層次分類中候選類別<b class='flag-5'>搜索算法</b>

    激光散亂點(diǎn)云K最近鄰搜索算法

    針對(duì)激光散亂點(diǎn)云的數(shù)據(jù)量大,且具有面型的特點(diǎn),為降低存儲(chǔ)器使用量,提高散亂點(diǎn)云的處理效率,提出了一種散亂點(diǎn)云K最近鄰(KNN)搜索算法。首先,利用多級(jí)分塊、動(dòng)態(tài)鏈表的存儲(chǔ)方式,只存儲(chǔ)非空的子空間編號(hào)
    發(fā)表于 12-11 14:09 ?1次下載

    以進(jìn)化算法搜索策略實(shí)現(xiàn)神經(jīng)架構(gòu)搜索的方法

    神經(jīng)網(wǎng)絡(luò)的發(fā)展歷程,分類介紹以進(jìn)化算法搜索策略實(shí)現(xiàn)神經(jīng)架構(gòu)搜索的方法和過(guò)程,并比較基于進(jìn)化算法
    發(fā)表于 03-22 14:37 ?15次下載
    以進(jìn)化<b class='flag-5'>算法</b>為<b class='flag-5'>搜索</b>策略實(shí)現(xiàn)神經(jīng)架構(gòu)<b class='flag-5'>搜索</b>的方法

    基于麻雀搜索算法優(yōu)化SVM的故障診斷

    )優(yōu)化SⅤM的故障診斷方法。利用麻雀搜索算法(SSA)對(duì)支持向量機(jī)的懲罰參數(shù)(C)與核參數(shù)(g)進(jìn)行優(yōu)化,并構(gòu)建SSA-sVM滾動(dòng)軸承故障診斷模型。結(jié)果表明:對(duì)于滾動(dòng)軸承的常見(jiàn)故障, SSA-SVM
    發(fā)表于 06-01 12:00 ?18次下載

    二分搜索算法運(yùn)用的框架套路

    我們前文 我作了首詩(shī),保你閉著眼睛也能寫對(duì)二分查找 詳細(xì)介紹了二分搜索的細(xì)節(jié)問(wèn)題,探討了「搜索一個(gè)元素」,「搜索左側(cè)邊界」,「搜索右側(cè)邊界」
    的頭像 發(fā)表于 08-25 16:06 ?1852次閱讀

    圖染色局部搜索算法python

    一個(gè)簡(jiǎn)單的局部搜索算法解決圖染色問(wèn)題,python版本太少了,寫了一個(gè)
    發(fā)表于 01-03 14:31 ?1次下載