推荐系统学习笔记之七——大数据量下相似item计算(LSH)

  在推荐系统中,我们不可避免的会遇到相似物品推荐的问题,这时候我们首先会想到去计算所有items互相间的相似度。而当我们去一个个计算iem与item之间的相似度(如余弦相似度)时,我们会发现这时一个时间复杂度至少O^(n*n*m)的问题,对于n个item中的每一个item,都要计算它与其他所有item的向量积(向量长度即user个数为m)。

  这个时间复杂度是绝对无法接受的。于是前辈们实现了很多种算法来解决这个问题,目前最受工业界欢迎的是使用“桶”思想的算法,LSH就是这种“桶”算法的一份子。

   实质上,“桶”算法就是在计算相似度之前先使用最近邻算法将相似item放在一起,找最相似item时只计算该桶中的item的相似度。

使用LSH (局部敏感哈希)分桶

  LSH分桶的思路是这样的:对于所有的item向量,先按照hash映射(LSH)将其分到不同的桶中(规则保证相似度高的item在同一个桶),那么我们找一个item的最相似item们就可以只在这个桶中去找,大大节省了计算量。

  这样一来,具体的时间复杂度就依据我们分桶数和桶中元素个数而定了。

  整体思路是这样,那么这个hash映射(LSH)怎么操作?

LSH

1)如果d(x,y) ≤ d1, 则h(x) = h(y)的概率至少为p1;

2)如果d(x,y) ≥ d2, 则h(x) = h(y)的概率至多为p2;

其中d(x,y)表示x和y之间的距离,d1 < d2, h(x)和h(y)分别表示对x和y进行hash变换。

满足以上两个条件的hash functions称为(d1,d2,p1,p2)-sensitive。而通过一个或多个(d1,d2,p1,p2)-sensitive的hash function对原始数据集合进行hashing生成一个或多个hash table的过程称为Locality-sensitive Hashing。

  

  

发布了88 篇原创文章 · 获赞 28 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_35946969/article/details/89037012