基于Hash算法的高维数据的最近邻检索
一.摘要
最緊鄰檢索:一種樹(shù)基于樹(shù)結(jié)構(gòu),一種是基于hash
a.隨機(jī)投影算法,需要產(chǎn)生很多哈希表,才能提高性能。
b.基于學(xué)習(xí)的哈希算法在哈希編碼較短時(shí)候性能不錯(cuò),但是增加編碼長(zhǎng)度并不能顯著提高性能。
隨機(jī)投影:實(shí)際上就是隨機(jī)的,實(shí)際上需要挖掘使用數(shù)據(jù)的內(nèi)部結(jié)構(gòu),結(jié)合最大熵原理。
基于密度的哈希就是依據(jù)數(shù)據(jù)分布產(chǎn)生最合理的投影。
數(shù)據(jù)稀疏:稀疏編碼+ 壓縮感知
GIST1M數(shù)據(jù)集2.55G,這個(gè)是專門(mén)做最近鄰檢索的。
二.緒論
2.1 課題背景
最近鄰檢索的主要問(wèn)題是如何建立高效索引。
數(shù)據(jù)集是n*d。
d = 1,先排序,然后二分查找,空間復(fù)雜度是o(n),時(shí)間復(fù)雜度是o(nlgn);各種平衡樹(shù)也行。
d = 2時(shí),用voronoi圖(泰森多邊形或者狄利克雷圖),這個(gè)我剛開(kāi)始看k-means得時(shí)候找到過(guò),來(lái)自于GIS的技術(shù)。時(shí)空同上。
d>3時(shí)候找不到空間線性、時(shí)間對(duì)數(shù)的算法了。
d<20時(shí),利用KD樹(shù)(1975年提出)。
提出近似(最優(yōu)解的宇普西龍鄰域內(nèi)的點(diǎn)都可以返回)的概念,這個(gè)理念的思想是許多情況下近似解和最優(yōu)解差別不大。
k分類(lèi)算法,近朱者赤、近墨者黑,判斷一個(gè)點(diǎn)屬于哪一類(lèi)就看他周?chē)狞c(diǎn)多數(shù)屬于哪一類(lèi)。如果k太小,容易受噪聲點(diǎn)影響,k太大,會(huì)因?yàn)楹苓h(yuǎn)的點(diǎn)包含進(jìn)來(lái)而影響算法性能。
k-means算法的一個(gè)計(jì)算瓶頸是為每個(gè)數(shù)據(jù)點(diǎn)找最近類(lèi)心。
2.2 算法基礎(chǔ)
主流的哈希算法可以看做是降維,因此先介紹降維算法。
降維包括特征提取和特征選擇。特征提取是選擇某幾維,比如研究基因?qū)XX的影響,就研究某幾個(gè)基因就行了,感覺(jué)有點(diǎn)像物理實(shí)驗(yàn)中的控制變量法。
特征提取是構(gòu)造了原有的特征,比如隨機(jī)投影、PCA,LDA(線性判別(discriminant)分析)。這些降維算法都可以轉(zhuǎn)換為哈希算法。
隨機(jī)投影基于Johnson-Lindenstrauss定理。
筆者注:Johnson–Lindenstrauss 定理是我在今晚的一個(gè)學(xué)術(shù)報(bào)告里聽(tīng)說(shuō)的一個(gè)非常令人驚訝的定理。簡(jiǎn)單說(shuō)來(lái),它的結(jié)論是這樣的:一個(gè)一百萬(wàn)維空間里的隨便一萬(wàn)個(gè)點(diǎn),一定可以幾乎被裝進(jìn)一個(gè)幾十維的子空間里!
嚴(yán)格說(shuō)來(lái)是這樣:在 M 維空間中的 N 個(gè)點(diǎn),幾乎總是被包含在一個(gè) D 維子空間里的。這里的 D 按照直覺(jué)應(yīng)當(dāng)?shù)扔?N 的階,可是實(shí)際上我們只需要讓 D 是 log(N) 的階就可以了。這里「幾乎被包含在」的確切含義是它在這個(gè)子空間上的投影幾乎是等距的(允許有一個(gè) ε 的誤差,而常數(shù) D/log(N) 就依賴于 ε)。很顯然,這件事情在高維數(shù)據(jù)降維時(shí)有極重要的意義。
這個(gè)定理的證明很初等。它依賴于這樣的一個(gè)基本概率事實(shí):一個(gè)隨機(jī)的 M 維單位向量到一個(gè)隨機(jī)的 D 維子空間上的投影的長(zhǎng)度幾乎一定約等于 D/M。這件事情本身也有點(diǎn)不同尋常,雖然它可以通過(guò)簡(jiǎn)單的計(jì)算來(lái)證實(shí)。這是概率論計(jì)算中常常出現(xiàn)的由于高維度而導(dǎo)致的反直覺(jué)現(xiàn)象的一例。
這讓我想起另一個(gè)高維度導(dǎo)致的悖論,是我在學(xué)大數(shù)定律時(shí)了解到的。在 M 維單位立方體中隨機(jī)取一個(gè)點(diǎn),當(dāng) M 充分大時(shí)根據(jù)大數(shù)定理容易算出這個(gè)點(diǎn)到立方體中心的距離幾乎一定等于 √(M/3)/2。于是這就說(shuō)明 M 維實(shí)心單位立方體幾乎就完全位于一個(gè)半徑為 √(M/3)/2 的球殼上。這里沒(méi)有任何搗鬼之處,事實(shí)上就是如此。
http://imaginary.farmostwood.net/573.html
PCA如果映射為一個(gè)點(diǎn)的話,那么丟失休息,所以,映射后的數(shù)據(jù)要方差最大,保證數(shù)據(jù)比較離散,盡可能地保留多的信息。
LDA是有監(jiān)督的線性降維方法,和PCA不同,他要求盡可能使數(shù)據(jù)被容易區(qū)分,即同一類(lèi)數(shù)據(jù)點(diǎn)盡可能拷進(jìn),不同類(lèi)的盡可能分散。
還有就是保留局部投影,這就是譜方法。
三.相關(guān)工作
在實(shí)際應(yīng)用中,我們往往不一定需要用到真實(shí)的最近鄰,許多時(shí)候我們都只需要在很短的時(shí)間內(nèi)得到近似的最近鄰即可,這也給了研究學(xué)者一個(gè)新的研究的方向。
超平面分割的哈希隨著編碼長(zhǎng)度的增加性能并不能顯著增加。
迭代量化哈希能提升二值哈希的均衡性,從而提升性能。
譜哈希挖掘數(shù)據(jù)的內(nèi)部結(jié)構(gòu)。
球哈希能顯著增加準(zhǔn)確度。
四.密度哈希算法
先用k-means算法對(duì)數(shù)據(jù)分組,不過(guò)大量數(shù)據(jù)下k-means運(yùn)行時(shí)間很長(zhǎng),所以需要讓算法P次后停止迭代(P=5)。假設(shè)產(chǎn)生了k個(gè)組,那么就以每個(gè)組內(nèi)的中心點(diǎn)作為投影向量。
www.zjucadcg.cn/dengcai/Data/DSH.html
www.zjucadcg.cn/dengcai/Data/NNSData.html
www.zjucadcg.cn/dengcai/Data/DimensionReduction.html
五.基于壓縮感知的哈希算法
據(jù)Jonson Lindenstrauss定理為了使一個(gè)含有個(gè)點(diǎn)的數(shù)據(jù)點(diǎn)集在投影到低維空間后依然很好地保持著點(diǎn)對(duì)距離,我們必須構(gòu)建大約O(ln n/ε^2)個(gè)隨機(jī)投影向量,其中ε(Epsilon)參數(shù)是距離估計(jì)的相對(duì)誤差。
在這一章,針對(duì)前面所提到的目前主流哈希算法所存在的問(wèn)題,我們將提出一個(gè)新的哈希算法:基于壓縮感知的哈希算法(這個(gè)算法結(jié)合了稀疏編碼技術(shù)和壓縮感知理論。這個(gè)算法的主要思想是基于壓縮感知理論中的一個(gè)重要的性質(zhì)受限等距性質(zhì)。這個(gè)性質(zhì)強(qiáng)調(diào)了對(duì)于任意一個(gè)稀疏的向量,隨機(jī)投影保持這些高維稀疏向量之間的歐氏距離的概率都是非常大的。
根據(jù)J-L定理,我們可以想到的最直接的方法就是把高維數(shù)據(jù)投影到低維空間,然后用一些高效的能在低維空間快速檢索最近鄰的方法(如kd-tree樹(shù))來(lái)處理查詢。這個(gè)方法的主要問(wèn)題在于為了使得每個(gè)點(diǎn)的最近鄰都能以很大的概率在檢索的過(guò)程中被返回,需要K這么大才可以,顯然這是不能令人滿意的。
總結(jié)
以上是生活随笔為你收集整理的基于Hash算法的高维数据的最近邻检索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: redis的hmset乐观锁的实现
- 下一篇: 利用Format函数格式化时间和日期