协同过滤推荐算法(CF)
协同过滤
用户行为蕴藏着很多模式,著名的“啤酒和尿布”的故事就是用户行为模式的良好体现。基于用户行为推荐的主要思想是利用已有用户的历史行为数据(显式反馈或隐式反馈),预测当前用户可能感兴趣的物品,其中显式反馈主要为用户评分,隐式反馈主要包括浏览、搜索等。
基于用户行为的推荐算法也称为协同过滤算法(Collaborative Filtering Recommendation),是推荐领域应用最广泛的算法,该算法不需要预先获得用户或物品的特征数据,仅依赖于用户的历史行为数据对用户进行建模,从而为用户进行推荐。协同过滤算法主要包括基于用户的协同过滤(User-Based CF)、基于物品的协同过滤(Item-Based CF)、隐语义模型(Latent Factor Model)等。其中基于用户和物品的协同过滤是通过统计学方法对数据进行分析的,因此也称为基于内存的协同过滤或基于邻域的协同过滤;隐语义模型是采用机器学习等算法,通过学习数据得出模型,然后根据模型进行预测和推荐,是基于模型的协同过滤。
基于用户的协同过滤(User-Based CF)
基于用户的协同过滤(下文简称UserCF)的基本思想为:给用户推荐和他兴趣相似的用户感兴趣的物品。当需要为一个用户A(下文称A)进行推荐时,首先,找到和A兴趣相似的用户集合(用U表示),然后,把集合U中用户感兴趣而A没有听说过(未进行过操作)的物品推荐给A。算法分为两个步骤:首先,计算用户之间的相似度,选取最相似的N个用户,然后,根据相似度计算用户评分。
- 用户相似度
用户相似度计算基于用户的协同过滤算法的重要内容,主要可以通过余弦相似度、杰卡德系数等方式进行计算。
假设:给定用户u和v,令表示用户u有过正反馈的物品集合,令为用户v有过正反馈的物品集合,则用户u和v之间的相似度可以通过如下方式计算:
余弦相似度:
杰卡德系数: - 用户评分
得到用户相似度后,可以根据如下公式计算用户评分:
其中代表用户u对物品i的评分,为与用户u最相似的K个用户,为对物品i进行过操作的用户集合, 为用户u与用户v的相似度, 为用户v对物品i的评分。
UserCF的推荐结果反映了用户所在的一个兴趣群体中的热门物品,更加社会化但缺乏个性化, 能够满足物品的时效性,在新闻推荐领域能够发挥很大的作用。
用户的兴趣在一段时间内是相对固定的,因此用户相似度矩阵不会实时进行更新,存在新用户的冷启动问题。
基于物品的协同过滤(Item-Based CF)
基于物品的协同过滤(下文简称ItemCF)是目前应用最为广泛的算法,该算法的基本思想为:给用户推荐和他们以前喜欢的物品相似的物品,这里所说的相似并非从物品的内容角度出发,而是基于一种假设:喜欢物品A的用户大多也喜欢物品B代表着物品A和物品B相似。基于物品的协同过滤算法能够为推荐结果做出合理的解释,比如电子商务网站中的“购买该物品的用户还购买了…”。ItemCF的计算步骤和UserCF大致相同:首先,计算物品相似度,选出最相似的N个物品,然后根据相似度计算用户评分。
- 物品相似度
假设:为喜欢物品i的用户集合,为喜欢物品j的用户集合,则物品相似度计算公式可以定义为:
上述公式将物品i和物品j的相似度定义为:同时喜欢物品i、j的用户数占只喜欢物品i用户数的比例,但如果物品j十分热门,大部分用户都很喜欢,那么就会造成所有物品都和j有较高的相似度,因此可以对计算公式进行如下改进:
改进后的相似度计算公式惩罚了物品j的热门度,在一定程度上减少了热门物品为相似度带来的影响。 - 用户评分
得到物品相似度后,可以根据如下公式计算用户评分:
其中代表用户u对物品i的评分,代表和物品i最相似的K个物品,为用户u曾经感兴趣的物品集合, 为物品i和物品j的相似度, 为用户u对物品j的评分。
ItemCF的推荐结果更加个性化,反映了用户的个人兴趣,对挖掘长尾物品有很大帮助,被广泛应用于电子商务系统。在物品数较多时,物品相似度计算效率较差,因此通常以一定的时间间隔离线进行计算,然后将物品相似度数据缓存在内存中,这样一来,便可以根据用户的新行为实时向用户做出推荐。ItemCF同样存在新用户冷启动问题。
参考:
1.https://blog.****.net/greedystar/article/details/80813057