MinHash原理與應用

2021-09-23 21:52:04 字數 1106 閱讀 6523

jaccard index

舉例a,b 兩個集合:

a =

b =

根據jaccard index公式,a,b的相似度 s(a,b) = |a∩b|/|a∪b| = 2/8 = 0.25

當然直接計算兩個集合的交集與並集,是很耗計算資源的,特別是在海量資料場景下不可行。

假如,我們隨機從兩個集合中各挑選乙個元素s(a)、s(b),剛好這兩個無素相同的概率是多少呢?

從圖上看,這個概率其實等同於,在a∪b這個大的隨機域裡,選中的元素落在a∩b這個區域的概率,這個概率就等於jaccard的相似度!這就是minhash的基本原理。

基於這一原理,我們找乙個隨機的雜湊函式h,對集合的每乙個元素作雜湊運算,比如集合a,可以算出5個hash值,因為是隨機的,這5個hash值裡值最小的那個元素,對於a集合中所有元素概率都是均等的。同樣方法從b中取最小hash值,2個minhash相等的概率就是集合的相似度了。

我們只需要找到n個雜湊函式,對集合生成一組minhash,算兩個集合的相似度,也就是這2組minhash中,交集/並集了。

這個計算相對容易了,因為每個集合的元素數變成了常數n,也就是說,minhash其實是一種降維技術

在mahout中用minhash作聚類,則是將每個minhash相同的向量聚集為乙個簇,雜湊函式個數為10的情況下,有乙個hash相同就表示至少有20%的相似度了。

你可能注意到,這個相似度其實沒有說元素的權重,另乙個問題是雜湊函式個數,理論上次數越多,會越準確,但是計算複雜度也越高,實際應用需要找乙個平衡點。

我在乙個推薦人的場景——將幾十萬優質使用者按相似度推薦給幾千萬的普通使用者,就是先用minhash篩選一次,為每個普通使用者推薦乙個按minhash相同個數作排序的、至少跟使用者交集的優質使用者備選集,再計算使用者跟備選集的余弦相似度,找出最相似的topn作為推薦。這種方法雖然不是最優解(計算量仍然很大),但是在乙個可接受的時間範圍內,效果跟兩兩計算余弦相似取topn相比比較接近(通過取樣測試,取使用者權重最重的topn個屬性作minhash計算,這樣的結果往在做topn的推薦容易接近於基於cos的最優解)。另外因為涉及到兩個量級差異比較大的集合的推薦,簡單用聚類推薦效果很難達到使用minhash的方法。

SSH原理與應用

ssh是每一台linux電腦的標準配置。隨著linux裝置從電腦逐漸擴充套件到手機 外設和家用電器,ssh的使用範圍也越來越廣。不僅程式設計師離不開它,很多普通使用者也每天使用。雖然本文內容只涉及初級應用,較為簡單,但是需要讀者具備最基本的 shell知識 和了解 公鑰加密 的概念。如果你對它們不熟...

C STL nth element原理與應用

lz最近的考試中,某題可以通過呼叫nth element 來水過70 的資料 但是lz並不會啊 歷史總是驚人的相似 於是就有了這篇blog 在編寫 時,有時會有 在乙個無序表中快速得到第k小的元素 的需求 而直接排序 不能水過一些測試點 時間不能承受 於是stl的algorithm標頭檔案就給我們提...

git原理與應用

目錄 1.作用 2.特點 3.原理 4.git本地倉庫操作 5.git遠端倉庫 6.git衝突 7.git忽略特殊檔案 版本控制 專案託管 分布式版本控制系統 每個人都有乙個完整的版本庫,使用者之間相互不影響,唯一關聯就是提供乙個 服務平台 github 碼雲 進行資料互動。git本地主要分為兩大塊...