海量数据相似性度量与聚类: LHS-MinHash

海量数据相似性度量与聚类: LHS-MinHash

  写本文的原因是近期在涉猎用户画像相关的无监督学习理论,刚好看到一篇运用LHS-MinHash做用户聚类的文章,却讲得过于笼统,对我这样的萌新(菜鸡)不太友好。于是我去搜索了关于LHS-MinHash和simhash的相关博客,有的写得非常不负责,甚至误导了我,有的写的比较详细,但部分细节总感觉有点断片,好像漏掉了什么。同时,这些博客的内容比较相似,原以为是互相借鉴的,后来发现它们都是复述Stanford的大数据课程,又没写清楚。因此我也来总结一篇,只求我自己搞清楚LHS-MinHash的原理和用途。因此,本篇文章的大部分内容将源于Stanford课程(下称课程)Mining of Massive Datasets的第三章,有兴趣的同学可以自行查阅。
  对待社交网络中每天都在更新的千亿级别的无标签数据,传统的聚类方法效率太低了,比方说Kmeans,每个样本都必须与所有候选中心计算相似度,才能进行归类,因此算法的时间复杂度是 O(NK) O ( N K ) ,其中 K K 是聚类数, N 是样本数(上千亿),太奢侈了,根本无法实现日均多次滚动,无法上线或产品化。聚类的核心是“发现相似物品”,这与其他的一些问题是异曲同工的,比如社区检测(Community Detection),海量数据查重等等。Stanford课程中举的例子就是海量网页的查重,为了高效地解决这个问题,课程依次提出了“Shingling”和“MinHash”算法,而针对数据量过大的问题,提出了“LSH hashing”,本文也将挑取其中的“MinHash”和“LSH hashing”进行总结。

预备知识:Jaccard 相似度

Jaccard(X,Y)=|XY||XY| J a c c a r d ( X , Y ) = | X ∩ Y | | X ∪ Y |


MinHash

  对于一个网页(或文章),我们可以用Word2vec、用BOW、用k-shingle来表达,这些方法无一例外地占用非常大的空间,使得文章本身的存储就是一个问题,更不要提文章之间的相似度运算了。如果将word看成特征,那么文章就是在一个高维词空间中的向量,对于这样一种数据表达,很容易想到对它进行降维,minhash正是这么一个思路。为了讲清楚minhash,首先要定义一种集合的矩阵表达。
  假设全集为 { a,b,c,d,e} { a , b , c , d , e } ,四个子集分别是 S1={ a,d} S 1 = { a , d } S2={ c} S 2 = { c } S3={ b,d,e} S 3 = { b , d , e } S4={ a,c,d} S 4 = { a , c , d } 。则可以定义一个叫“characteristic matrix”的矩阵 C(r,c) C ( r , c ) ,矩阵的列对应一个子集,矩阵的行对应全集里的一个元素,若第 c c 个子集中包含元素 r ,则 C(r,c)=1 C ( r , c ) = 1 ,否则 C(r,c)=0 C ( r , c ) = 0 ,如下图所示。为了方便理解,可以将characteristic matrix的行看成物品(product),列看成用户(customer),该矩阵的意义即用户的购买历史列表。显然,characteristic matrix是一个极度稀疏的高维矩阵。


Minhashing

  为了方便解释,下面都把子集称为“用户”,把元素称为“商品”好了。所谓“MinHash”(最小哈希),就是指将上面的characteristic matrix的行随机打乱,然后取每一列中第一个非零元素的行号作为该用户的“MinHash Value”(最小哈希值),进行 d d 次打乱产生 d 个“MinHash Value”,构成该用户的“MinHash Signature”(最小哈希签名)向量,由于签名向量的维度通常远低于商品个数,因此相当于做了降维。使用降维的特征向量来衡量用户之间的相似度。
  以上是MinHash的综述,光这么讲很难理解,下面给出一个例子。假设随机打乱函数 h h ,将矩阵的行顺序变成了 b e a d c ,如下图所示, S1 S 1 列的首个非零元素是 a a ,则用 a 作为 S1 S 1 的签名,即 h(S1)=a h ( S 1 ) = a 。同理,可以得到 h(S2)=c h ( S 2 ) = c h(S3)=b h ( S 3 ) = b h(S4)=a h ( S 4 ) = a


  之所以称之为“MinHash”,我认为,characteristic matrix的每一列都可以看作是对一个用户的哈希化,不同的行排列方式能获得不一样的哈希串,如果两个用户的购买列表足够相似,那么两个哈希串也将是很相似的。而“最小”体现在取“第一个非零元素的所在行”。为什么要费尽心思定义这样一个奇怪的哈希值呢?
  是由于一个神奇的定理:两个集合的MinHash值相等的概率,等于这两个集合的Jaccard相似度。
  首先证明该定理。现在我们拿 S

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值