推荐系统实战-出租公寓项目4-协同过滤算法推荐
https://github.com/worry1613/gongyu-recommend
代码已经托管到github上,有任何的疑问可以直接看代码,或者直接给我发邮件[email protected],看到我会及时回复。
协同过滤算法
协同过滤是推荐系统中最常用到的算法,最基础的算法。 在协同过滤的基础上,衍生出了很多高级的算法,新的算法。协同过滤分为2种,基于用户的协同过滤,基于物品的协同过滤。
基于用户的协同过滤(userCF)
基于用户的协同过滤算法包括2个步骤:
1.找到和目标用户兴趣相似的用户集合
2.找到这个集合中用户喜欢的,且目标用户没有看过的物品推荐给用户
推荐那些和他有共同兴趣爱好的用户喜欢的物品
简单点一句话,‘看过A的用户还看过哪些物品’。在物品详情页中,几乎都能见到。
具体实现请看https://github.com/worry1613/gongyu-recommend/usercf.py
类userCF经典算法,类userCFIIF改进版算法,对热门商品进行了适当的降权,使推荐数据更多样性。
基于物品的协同过滤(itemCF)
基于用户的协同过滤算法包括2个步骤:1.计算物品之间的相似度
2.根据物品的相似度和用户的历史行为给用户生成推荐列表
推荐那些和他之前喜欢的物品类似的物品
简单点一句话,‘找到和看过的物品类似的物品’
具体实现请看https://github.com/worry1613/gongyu-recommend/itemcf.py
类itemCF经典算法,类itemCFIUF改进版算法,对热门商品进行了适当的降权,使推荐数据更多样性。
如何使用协同过滤算法
什么情况下用基于用户的协同过滤?什么情况下用基于物品的协同过滤?
1.用户和物品哪个数据少,就用基于哪个的算法,为什么?计算量小啊,很快就能出结果。临时可以用一用可以,长久不行。
2.时效性强的推荐使用基于用户的协同过滤,例如,新闻推荐。
3.个性化强的推荐使用基于物品的协同过滤,例如,论文,歌,图片,商品 推荐。
UserCF是某个群体内的物品热门程度
ItemCF是反应本人的兴趣爱好,更加个性化
优缺点对比
项目 |
UserCF | ItemCF |
性能 | 适用于用户较少的场合,如果用户过多,计算用户相似度矩阵的代价交大 | 适用于物品数明显小于用户数的场合,如果物品很多,计算物品相似度矩阵的代价交大 |
领域 | 实效性要求高,用户个性化兴趣要求不高 | 长尾物品丰富,用户个性化需求强烈 |
实时性 | 用户有新行为,不一定需要推荐结果立即变化 | 用户有新行为,一定会导致推荐结果的实时变化 |
冷启动 | 在新用户对少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度是离线计算的 新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给其他用户 |
新用户只要对一个物品产生行为,就能推荐相关物品给他,但无法在不离线更新物品相似度表的情况下将新物品推荐给用户 |
推荐理由 | 很难提供 | 可以根据用户历史行为归纳推荐理由 |