推荐系统学习笔记之七——大数据量下相似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。

  

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值