目前我正在研究如何使用局部敏感哈希來找到最近的鄰居。然而,當我正在閱讀論文並在網上搜索時,我發現了兩種算法:兩個算法用局部敏感哈希來找到最近的鄰居,哪一個?
1-使用L個隨機數LSH函數的哈希表,從而增加兩個文檔類似的機會得到相同的簽名。例如,如果兩份文件的相似度爲80%,則有80%的機會從一個LSH函數中獲得相同的簽名。但是,如果我們使用多個LSH函數,那麼從一個LSH函數獲得文檔的相同簽名的可能性就更大。這種方法在維基百科的解釋,我希望我的理解是正確的:
http://en.wikipedia.org/wiki/Locality-sensitive_hashing#LSH_algorithm_for_nearest_neighbor_search
2-其他算法使用的方法從紙(第5)呼籲:從舍入算法相似性估計技術摩西S.恰裏卡爾。它基於使用一個LSH函數生成簽名,然後對其應用P置換,然後對列表進行排序。其實我不太瞭解這個方法,我希望有人能澄清它。
我的主要問題是:爲什麼有人會使用第二種方法而不是第一種方法?我發現它更容易,更快。
我真的希望有人能幫忙!!!
編輯: 其實我不確定@ Raff.Edward在「第一」和「第二」之間混合。因爲只有第二種方法使用半徑,第一種方法使用由散列族F組成的新哈希族g。請檢查維基百科鏈接。他們只是使用許多g函數來生成不同的簽名,然後爲每個g函數都有一個相應的哈希表。爲了找到一個點的最近鄰點,你只需讓該點通過g函數並檢查相應的哈希表是否有衝突。因此,我如何把它理解爲更多的功能......更多的碰撞機會。
我沒有發現任何關於第一種方法的半徑提及。
對於第二種方法,它們只爲每個特徵向量生成一個簽名,然後對它們應用P置換。現在我們有P個排列列表,每個列表包含n個簽名。現在他們對P中的每個列表進行排序。然後給出一個查詢點q,它們爲它生成簽名,然後對其應用P置換,然後在每個排列和排序的P列表上使用二進制搜索來找到最相似的簽名查詢q。在閱讀了許多關於它的論文後,我總結了這一點,但我仍不明白爲什麼有人會使用這種方法,因爲它在尋找漢明距離方面似乎並不快。
對我來說,我會簡單地做以下操作來查找查詢點q的最近鄰居。給定簽名N的列表,我將生成查詢點q的簽名,然後掃描列表N並計算N中每個元素與q的簽名之間的漢明距離。因此,我最終會與q最近的鄰居結束。它需要O(N)!
請問您可以閱讀該文章的編輯版本嗎? –
我已回覆您的修改。我並沒有感到困惑,這篇維基文章並沒有很好地解釋發生了什麼。 –
@ Raff.Edward你知道方法2的任何開放src實現嗎?你能否給我也看看[這個](http://stackoverflow.com/questions/37377042/search-in-locality-sensitive-hashing)我發佈的問題? – justHelloWorld