1. 传统推荐算法
1.1 协同过滤算法
协同过滤算法是 基于用户和物品之间的交互信息 预测用户对某一物品(事件等)的评分(正向反馈)从而得到用户的推荐集合。该算法的核心是 共线矩阵 的获取以及 向量相似度 计算。
假设有n个用户,m个物品
-
基于用户相似性的协同过滤算法(UserCF)
基本思想:兴趣相似的人,感兴趣的东西可能相似。
基本思路:维护共现矩阵中行向量的相似性(用户向量,时间复杂度: O ( n 2 ) O(n^2) O(n2))→ 获取Top k个相似用户对某一物品j的加权评分→对不知道评分的物品进行预测分数(时间复杂度: O ( k × m ) O(k \times m) O(k×m))→ 排序。
优点:具备更强的社交性,用户能够快速得知与自己相似的人最近喜欢什么,从而快速更新自己的兴趣列表。 新闻,热点,微博?当很多个用户感兴趣一个话题时,该话题会推送给更多的用户,从而产生热点效应。
缺点:从技术的角度看,当用户量n远大于商品数量m时,用户相似度矩阵的存储和计算(可能可以以更新的方式实现)开销过大。当用户向量稀疏时,找到相似用户的准确率低,不适用于正反馈获取较困难的应用场景。
b. 基于物品相似性的协同过滤算法(ItemCF)
基本思想:用户对与跟自己感兴趣物品相似的物品也可能感兴趣。
基本思路:维护共现矩阵中列向量的相似性(物品向量,时间复杂度: O ( m 2 ) O(m^2) O(m2))→ 获取用户j感兴趣的物品集合 S i t e m s j S_{items}^j Sitemsj→对于未知评分的物品i,从 S i t e m s j S_{items}^j Sitemsj中获取相似度Top k的k个物品,计算加权平均分数→ 根据分数进行排序生成推荐列表。
优点:当用户量n远大于商品数量m的场景,其存储压力较小。更适合兴趣变化较为稳定的应用,如淘宝购物时选购相似物品。
缺点:无法将两个物品相似这一信息推广到其他物品的相似性计算上,从而导致热门的物品具有很强的头部效应,即热门物品跟很多物品相似度高。由于冷门物品的向量非常稀疏,导致系统难以找到冷门物品之间的相似度。
附公式:
附1. 相似度计算公式
余弦相似度: s i m ( i , j ) = v i T v j ∣ v i ∣ ∣ v j ∣ sim(i,j)= \frac{\textbf{v}_i^T\textbf{v}_j}{|\textbf{v}_i||\textbf{v}_j|} sim(i,j)=∣vi∣∣vj∣viTvj, 皮尔逊相关系数: ( v i − v i ‾ ) T ( v j − v j ‾ ) ∣ v i − v i ‾ ∣ ∣ v j − v j ‾ ∣ \frac{(\textbf{v}_i-\overline{v_i})^T(\textbf{v}_j-\overline{v_j})}{|\textbf{v}_i-\overline{v_i}||\textbf{v}_j-\overline{v_j}|} ∣vi−vi∣∣vj−vj∣(vi−vi)T(vj−vj), ∣ ∗ ∣ |*| ∣∗∣表示向量的二范数
附2:加权平均计算公式
s c o r e k = ∑ w a n y s a n y ∑ w w a n y score_k = \frac{\sum{w_{any}s_{any}}}{\sum{w_{wany}}} scorek=∑wwany∑wanysany
总结:协同过滤矩阵的解释性强,实现简单。但可能受到特征向量性质的影响,推荐结果的头部效应明显,处理稀疏向量的能力弱。另一方面,该算法仅利用用户和物品的交互信息,无法引入用户的个人信息以及商品信息作为辅助。