1. 程式人生 > >高維數據的高速近期鄰算法FLANN

高維數據的高速近期鄰算法FLANN

根節點 能夠 com script 貴的 中心 strong 森林 .net

版權聲明:本文為博主原創文章,未經博主同意不得轉載。 https://blog.csdn.net/jinxueliu31/article/details/37768995

高維數據的高速近期鄰算法FLANN

1.?????簡單介紹

? ? ? ? ?在計算機視覺和機器學習中,對於一個高維特征,找到訓練數據中的近期鄰計算代價是昂貴的。對於高維特征,眼下來說最有效的方法是 the randomized k-d forest和the priority search k-means tree,而對於二值特征的匹配 multiple hierarchical clusteringtrees則比LSH方法更加有效。

? ? ? ? 眼下來說。fast library for approximate nearest neighbors (FLANN)庫能夠較好地解決這些問題。

2.?????高速近似NN匹配(FAST APPROXIMATE NN MATCHING)

2.1?隨機k-d樹算法(The Randomized k-d TreeAlgorithm)

a. Classick-d tree

? ? ? ? 找出數據集中方差最高的維度,利用這個維度的數值將數據劃分為兩個部分,對每一個子集反復同樣的過程。

? ? ? ? 參考http://www.cnblogs.com/eyeszjwang/articles/2429382.html。

b. ?Randomizedk-d tree

? ? ? ? 建立多棵隨機k-d樹。從具有最高方差的N_d維中隨機選取若幹維度,用來做劃分。在對隨機k-d森林進行搜索時候。全部的隨機k-d樹將共享一個優先隊列。

? ? ? ?添加樹的數量能加快搜索速度。但因為內存負載的問題。樹的數量僅僅能控制在一定範圍內,比方20,假設超過一定範圍,那麽搜索速度不會添加甚至會減慢。

技術分享圖片

2.2? 優先搜索k-means樹算法(The Priority Search K-MeansTree Algorithm)

? ? ? ? 隨機k-d森林在很多情形下都非常有效,可是對於須要高精度的情形,優先搜索k-means樹更加有效。 K-means tree 利用了數據固有的結構信息,它依據數據的全部維度進行聚類,而隨機k-d tree一次僅僅利用了一個維度進行劃分。

2.2.1 ?算法描寫敘述

算法1 建立優先搜索k-means tree:

(1)??建立一個層次化的k-means 樹;

(2)??每一個層次的聚類中心,作為樹的節點;

(3)??當某個cluster內的點數量小於K時。那麽這些數據節點將做為葉子節點。

技術分享圖片

算法2 在優先搜索k-means tree中進行搜索:

(1)??從根節點N開始檢索。

(2)??假設是N葉子節點則將同層次的葉子節點都添加到搜索結果中。count += |N|。

(3)??假設N不是葉子節點。則將它的子節點與query Q比較。找出近期的那個節點Cq。同層次的其它節點添加到優先隊列中。

(4)??對Cq節點進行遞歸搜索;

(5)??假設優先隊列不為空且 count<L。那麽從取優先隊列的第一個元素賦值給N,然後反復步驟(1)。

技術分享圖片

? ? ? ? 聚類的個數K,也稱為branching factor 是個非常基本的參數。

? ? ? ? 建樹的時間復雜度 = O( ndKI ( log(n)/log(K) ))? n為數據點的總個數,I為K-means的叠代次數。搜索的時間復雜度 = O( L/K * Kd * ( log(n)/(log(K) ) ) = O(Ld ( log(n)/(log(K) ) )。

2.3?層次聚類樹 (The Hierarchical ClusteringTree)

? ? ? ? 層次聚類樹採用k-medoids的聚類方法。而不是k-means。

即它的聚類中心總是輸入數據的某個點,可是在本算法中,並沒有像k-medoids聚類算法那樣去最小化方差求聚類中心,而是直接從輸入數據中隨機選取聚類中心點,這個方案在建立樹時更加簡單有效,同一時候又保持多棵樹之間的獨立性。

? ? ? ? 同一時候建立多棵樹,在搜索階段並行地搜索它們能大大提高搜索性能(歸功於隨機地選擇聚類中心。而不須要多次叠代去獲得更好的聚類中心)。建立多棵隨機樹的方法對k-d tree也十分有效,但對於k-means tree卻不適用。

技術分享圖片技術分享圖片

3.????? 參考文獻

(1)??ScalableNearest Neighbor Algorithms for High Dimensional Data. Marius Muja, Member,IEEE and David G. Lowe, Member, IEEE.

(2)??OptimisedKD-trees for fast image descriptor matching. Chanop Silpa-Anan, Richard Hartley.

(3)??FastMatching of Binary Features. Marius Muja and David G. Lowe.

高維數據的高速近期鄰算法FLANN