數據挖掘——近似最近鄰算法ANN之LSH
簡介
局部敏感哈希(Locality Sensitive Hashing,LSH)主要是爲了處理高維度數據的查詢和匹配等操作。
關於這個算法,綜合多個前輩的總結,總算是能搞懂的,現將我使用到的算法說明總結如下:
在此基礎上,再總結下LSH算法的大致步驟,並給出一個具體實例(網頁查找)。
LSH算法
必須說明,看到這裏之前,一定要仔細研讀上面給出的兩個鏈接,不然看不明白下面的實例。
LSH之相似網頁查找——Simhash
爲了計算哈希後各向量之間的距離,這裏使用漢明距離。
實例:
上面的圖是這個算法的大致流程圖,下面是具體過程:
假設當前文本文件爲 “美國“51區”僱員稱內部有9架飛機,曾看見灰色外星人”
(1)提取特徵
使用jieba庫函數,將上文本提取出特徵分別爲“美國”、“51區”、“僱員”、“稱”、……,“灰色”、“外星人”等。
(2)Hash
然後使用各種好使(即指儘量減少碰撞又能表達原特徵)的手段將提取出的特徵進行hash,hash後的特徵如上圖的第二列所示。
(3)加權
爲每一個特徵賦予一個權重,這個權重可使用tf-idf統計詞頻(當前文件中該特徵出現的次數/所有文件中該特徵出現的總次數),顯然,這個詞頻越大說明該特徵越重要,相應地權重就越大。這樣給每個hash後的特徵乘上這個權重,得到第三列。
(4)合併
將得到的每個乘以相應權重的特徵累加起來,各個數位各自相加。這樣,得到最右下角的一個對源文件的特徵表達。
(5)降維
對於上步驟中得到的特徵表達,大於0的另其爲1,小於0的另其爲0,這樣得到最終降維結果:[1,0,1,0,1,1] 。
思考一個問題:如果去掉特徵“灰色”,這樣的話對最後的結果會有影響嗎?
分析下:特徵“灰色”hash並加權後得[4,-4,4,4,4,4],如果去掉該特徵,那麼累加後特徵變爲[30,-22,38,-9,51,9],最後對應到降維的結果依然是[1,0,1,0,1,1]沒變。
所以,只要那些權重很大(很重要)的特徵纔會影響到最後的結果。
其他的近鄰算法先佔個坑,後面再補充:
- K-Means Tree
- K-D Tree