关注公众号 长歌大腿,发送“机器学习”关键字,可获取包含机器学习(包含深度学习),统计概率,优化算法等系列文本与视频经典资料,如《ESL》《PRML》《MLAPP》等。
《现代推荐算法》传统协同过滤(user-CF, item-CF)
协同过滤简介
协同过滤算法发展以来,与矩阵分解密切相关,多有时将矩阵分解系列也归于协同过滤种类,我们这里将其分开来对待,这篇文章讲传统的协同过滤算法,主要包含基于用户的协同过滤算法与基于物品的协同过滤算法两种。
基于用户的协同过滤算法的关键是找到相同偏好的用户,找到了偏好最近的几个用户,他们偏好的物品便是要给你推荐的目标。这个算法也简称“User-CF”,协同过滤算法的关键是解决相似度问题。
基于物品的协同过滤算法的关键是计算其它物品和历史物品的相似度,相似度最近的几个物品便是要推荐的物品。这个算法也简称“Item-CF”,协同过滤算法的关键也是解决相似度问题。
故我们先重点介绍一下常用的简单的相似度计算方法,更复杂的关于神经网络相似度方法那些我们以后再专门开一个章节来介绍相似度的计算。
传统user-cf与item-cf算法简单明了,这里就进行文字叙述而不进行数学公式的模型描述。
相似度的计算
余弦相似度
两向量越相似,向量夹角越小,cosine绝对值越大;值为负,两向量负相关。只能分辨个体在维之间的差异,没法衡量每个维数值的差异。
调整余弦相似度Adjusted Cosine Similarity
余弦相似度对数值的不敏感导致了结果的误差,调整余弦相似度修正了这种不合理性。
Jaccard相似度
Jaccard系数主要用于计算符号度量或布尔值度量的个体间的相似度,无法衡量差异具体值的大小,只能获得“是否相同”这个结果,所以Jaccard系数只关心个体间共同具有的特征是否一致这个问题。Jaccard系数等于样本集交集与样本集合集的比值。
欧几里距离
通常计算时候需要进行距离标准化,即将各个维度的数据进行标准化。
基于用户的协同过滤算法
用户A对物品Y的喜好程度=邻居用户j对物品Y的喜欢*用户A与用户j的相似度。
算法流程如下:
- 计算其他用户和目标用户的相似度。
- 根据相似度的高低找出K个目标用户最相似的邻居。
- 在这些邻居喜欢的电影中,根据邻居与你的远近程度算出每个电影的推荐度。
- 根据每一件物品的推荐度高低给你推荐物品。
基于物品的协同过滤算法
用户A对物品Y的喜好程度=用户A对所有交互物品j的喜欢*物品j与物品Y的相似度。
算法流程如下:
- 计算物品之间的相似度。
- 根据物品之间的相似度以及用户历史行为给用户生成推荐列表。
算法Trick 与比较
- User-CF适用于物品增长很快,同时物品之间相似度频繁变化的网站,这样是因为用户是小变量,物品是大变量,针对于这种情况,使用基于用户的协同过滤
- Item-CF物品有限,用户增长很快,这样是因为物品是小变量,用户是大变量,针对于这种情况,使用基于物品的协同过滤
优点:算法可解释性强。
缺点:使用“用户”和“物品”两个变量,并且只是根据相似性这个变量计算,是基于统计的低阶推荐算法,不具有精准推荐。而且对于
新物品的曝光,协同过滤效果差。