推荐算法之协同过滤

协同过滤的定义:通过找到兴趣相投,或者有共同经验的群体,来向用户推荐感兴趣的信息。

适用场景:被推荐用户有过比较多历史动作,并且其他用户也有过比较多的历史动作


举例:

以推荐用户电影为例,假设有100W用户,10W电影,用户的id为uid1,uid2,uid3... 电影的id为mid1,mid2,mid3....

(1)画表格,横坐标表示所有电影,纵坐标表示所有用户,交叉点为某个用户喜欢某部电影

 mid1mid2mid3mid4mid5mid10W
uid1111 1   
uid21111    
uid3111     
uid41 1 1   
        
        
uid100W1   1   

如表所示,1表示用户喜欢这部电影,所有的数据源我们都已经处理完毕

ps:

a.数据源来自于所有的服务器落地数据,包括但不仅限于db、日志;

b.“喜欢”这个词该怎么定义是这一步的难点,在这个例子中,我们可以拿用户的某些动作来定义为喜欢,如:用户浏览过这部电影、用户点赞过这部电影、用户查找过这部电影、用户观看过这部电影等等


(2)基于上面的数据,我们来拿出所有用户的喜欢的电影集合

uid1:{mid1,mid2,mid3,mid5}

uid2:{mid1,mid2,mid3,mid4}

uid3:{mid1,mid2,mid3}

uid4:{mid1,mid3,mid5}


(3)找到每个uid的mid集合交集最多的数据

uid1交集最多的是uid2,uid3,uid4

uid2交集最多的是uid1,uid3

uid3交集最多的是uid1,uid2

uid4交集最多的是uid1

ps:这步可以优化为,直接先找看看有没有哪个uid的mid集合是直接包含了要查找的uid的集合的(即该用户的mid集合是其他用户mid集合的子集/真子集),如果有,则该集合就是我们要找的集合;如果没有,则进行如上算法

例如,这里的uid3,可以看到,uid3的mid集合就是uid1和uid2的mid集合的真子集,所以,我们就可以直接判断,和uid3交接最多的就是uid2和uid3


(4)计算交集最多的集合跟自己集合的差集,如,

uid1和uid2的差集:{mid1,mid2,mid3,mid4} - {mid1,mid2,mid3,mid5} = {mid4},以此类推

uid1和uid3的差集是空集,uid1和uid4的差集也是空集

拿着这些所有的差集做并集:uid的差集并集集合是{mid4}

故:要推荐给uid1的电影集合为{mid4}

以此类推:

要推荐给uid2的电影集合为{mid5}

要推荐给uid3的电影集合为{mid4,mid5}

要推荐给uid4的电影集合为{mid2}



协同过滤以下有几个难点:

1.如何定义一个用户对一件事物持有的态度

2.这里把对事物的态度简化了,其实用户对一件事物的态度应该是个权值,以这个看电影为例子,我们可以把用户点赞作为10分,浏览作为3分等,但是这样做就增加了整个推荐系统的复杂度

3.最重要也是最难的一点,该算法必须要有大数据的支持



参考文章:http://mp.weixin.qq.com/s/eJZDqoM6Fz6KeD4MEjVFYQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值