协同过滤(CollaborativeFiltering)推荐算法是最经典、最常用的推荐算法。1.1基本思想
1.2目前比较广泛的CF算法是基于邻域的方法,如下:
2.1杰卡德(Jaccard)相似系数这是衡量两个集合的相似度的一种指标,两个用户u和V交互商品交集占并集的数量的比值;称为两个集合的杰卡德相似系数,用符号sim_{uv}表示,其中N(u),N(v)分别表示用户u和用户v交互商品的集合。
常用来评估某用户是否会对某商品进行打分.
故在集合的角度来描述交互的商品数量的乘积,公式如下:
这个在具体实现的时候,可以使用sklearn库的cosine_similarity进行实现:
调包实现皮尔逊评分:
fromscipy.statsimportpearsonri=[1,0,0,0]j=[1,0.5,0.5,0]pearsonr(i,j)3.基于用户的协同过滤(UserCF):猜测用户对某件物品的喜欢程度**UserCF包括两个步骤**:1.找到和目标用户兴趣相似的人群集合2.从中找到这个集合汇总的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户.3.根据这n个用户对准备推荐的物品的评分情况和与目标用户的相似程度会猜测出目标用户对物品的评分,如果评分比较高的话,就把物品推荐给目标用户,否则不推荐。最终结果的预测加权近似估算
利用用户相似度和相似用户的评价加权平均获得用户的评价预测,用下面式子表示:(u,p为用户,s为商品,权重w_{u,s}是用户u和用户s的相似度,R_{s,p}是用户s对物品p的评分。)
优化版本:用户相似度作为权值,但后面不单纯的是其他用户对物品的评分,而是该物品的评分与此用户的所有评分的差值进行加权平均,这时候考虑到了有的用户内心的评分标准不一的情况,即有的用户喜欢打高分,有的用户喜欢打低分的情况。
动手计算
计算余弦相似性
importnumpyasnpnp.corrcoef([...])4.UserCF编程实现总结简单三步骤:计算用户相似性矩阵、得到前N个用户相似用户、计算最终得分。
缺点:
基本思想ItemCF不计算物品的属性相似度,而是根据用户的历史偏好数据来计算物品之间的相似性,比如很多人买了A之后也买了B,那么推荐用户A在买了A之后,也推荐B。该算法认为,物品a和物品c具有很大的相似度是因为喜欢物品a的用户大都喜欢物品c。
ItemCF步骤
ItermCF代码实践总结简单三步骤:计算物品相似性矩阵、得到前N个相似物品、计算最终得分。
协同过滤的天然缺陷:推荐系统头部效应明显,处理稀疏向量的能力弱。
矩阵分解技术(MatrixFactorization,MF)被提出,该方法在协同过滤共现矩阵的基础上,使用更稠密的隐向量表示用户和物品,挖掘用户和物品的隐含兴趣和隐含特征,在一定程度上弥补协同过滤模型处理稀疏矩阵能力不足的问题。