寫本文的原因是近期在涉獵使用者畫像相關的無監督學習理論,剛好看到一篇運用lhs-minhash做使用者聚類的文章,卻講得過於籠統,對我這樣的萌新(菜雞)不太友好。於是我去搜尋了關於lhs-minhash和simhash的相關部落格,有的寫得非常不負責,甚至誤導了我,有的寫的比較詳細,但部分細節總感覺有點斷片,好像漏掉了什麼。同時,這些部落格的內容比較相似,原以為是互相借鑑的,後來發現它們都是複述stanford的大資料課程,又沒寫清楚。因此我也來總結一篇,只求我自己搞清楚lhs-minhash的原理和用途。因此,本篇文章的大部分內容將源於stanford課程(下稱課程)mining of massive datasets的第三章,有興趣的同學可以自行查閱。
對待社交網路中每天都在更新的千億級別的無標籤資料,傳統的聚類方法效率太低了,比方說kmeans,每個樣本都必須與所有候選中心計算相似度,才能進行歸類,因此演算法的時間複雜度是o(
nk) o(n
k),其中k k
是聚類數,
n' role="presentation" style="position: relative;">n
n是樣本數(上千億),太奢侈了,根本無法實現日均多次滾動,無法上線或產品化。聚類的核心是「發現相似物品」,這與其他的一些問題是異曲同工的,比如社群檢測(community detection),海量資料查重等等。stanford課程中舉的例子就是海量網頁的查重,為了高效地解決這個問題,課程依次提出了「shingling」和「minhash」演算法,而針對資料量過大的問題,提出了「lsh hashing」,本文也將挑取其中的「minhash」和「lsh hashing」進行總結。ja
對於乙個網頁(或文章),我們可以用word2vec、用bow、用k-shingle來表達,這些方法無一例外地占用非常大的空間,使得文章本身的儲存就是乙個問題,更不要提文章之間的相似度運算了。如果將word看成特徵,那麼文章就是在乙個高維詞空間中的向量,對於這樣一種資料表達,很容易想到對它進行降維,minhash正是這麼乙個思路。為了講清楚minhash,首先要定義一種集合的矩陣表達。
假設全集為
,四個子集分別是 s1
= s1=
,s2= s2=
,s3= s3=
,s4= s4=
。則可以定義乙個叫「characteristic matrix」的矩陣c(
r,c)
c (r
,c),矩陣的列對應乙個子集,矩陣的行對應全集裡的乙個元素,若第
c c
個子集中包含元素
r' role="presentation" style="position: relative;">rr,則
c(r,
c)=1
c (r
,c)=
1,否則c(
r,c)
=0c (r
,c)=
0,如下圖所示。為了方便理解,可以將characteristic matrix的行看成物品(product),列看成使用者(customer),該矩陣的意義即使用者的購買歷史列表。顯然,characteristic matrix是乙個極度稀疏的高維矩陣。
為了方便解釋,下面都把子集稱為「使用者」,把元素稱為「商品」好了。所謂「minhash」(最小雜湊),就是指將上面的characteristic matrix的行隨機打亂,然後取每一列中第乙個非零元素的行號作為該使用者的「minhash value」(最小雜湊值),進行
d d
次打亂產生
d' role="presentation" style="position: relative;">d
d個「minhash value」,構成該使用者的「minhash signature」(最小雜湊簽名)向量,由於簽名向量的維度通常遠低於商品個數,因此相當於做了降維。使用降維的特徵向量來衡量使用者之間的相似度。
以上是minhash的綜述,光這麼講很難理解,下面給出乙個例子。假設隨機打亂函式
h h
,將矩陣的行順序變成了be
adc' role="presentation" style="position: relative;">bea
dcbe
adc,如下圖所示,s1
s
1列的首個非零元素是
a a
,則用a' role="presentation" style="position: relative;">aa作為
s1s
1的簽名,即h(
s1)=
a h(s
1)=a
。同理,可以得到h(
之所以稱之為「minhash」,我認為,characteristic matrix的每一列都可以看作是對乙個使用者的雜湊化,不同的行排列方式能獲得不一樣的雜湊串,如果兩個使用者的購買列表足夠相似,那麼兩個雜湊串也將是很相似的。而「最小」體現在取「第乙個非零元素的所在行」。為什麼要費盡心思定義這樣乙個奇怪的雜湊值呢?
是由於乙個神奇的定理:兩個集合的minhash值相等的概率,等於這兩個集合的jaccard相似度。
首先證明該定理。現在我們拿s1
s
1和s2
s
2為例,為它們的characteristic matrix行的構成定義三種情況:
x x
,y' role="presentation" style="position: relative;">yy和
z z
。
相似性度量 聚類
影象分割與特徵提取 相似性度量 聚類 前面介紹的分類問題是利用已知類別的樣品來構造分類器。其訓練集樣品是已知類別的,所以又稱為有監督學習。在已知類別樣品的指導下對單個待測樣品進行分類。聚類問題則不同,它事先不了解一批樣品中的每乙個樣品的類別或者其他的先驗知識,而唯一的分類根據是樣品的特性。利用樣品的...
相似性度量 聚類
影象分割與特徵提取 相似性度量 聚類 前面介紹的分類問題是利用已知類別的樣品來構造分類器。其訓練集樣品是已知類別的,所以又稱為有監督學習。在已知類別樣品的指導下對單個待測樣品進行分類。聚類問題則不同,它事先不了解一批樣品中的每乙個樣品的類別或者其他的先驗知識,而唯一的分類根據是樣品的特性。利用樣品的...
聚類演算法概述1 相似性度量
一 聚類中的相似性度量 以下方法適用於直接對raw data進行相似性的度量,或者對比提取features之後的dada的相似性。1 距離 1 lr norm距離 如果是l1 norm,那就是絕對值 曼哈頓距離 manhattan distance d i,j xi xj yi yj 如果是l2 n...