协同过滤(Collaborative Filtering,CF)——经典/老牌
只用户行为数据得到。对于个用户,个物品,则有共现矩阵:
对于有正负反馈的情况,如“赞”是1和“踩”是-1,无操作是0:
对于只有显示反馈,如点击是1,无操作是0:
UserCF
算法步骤:
1)得到共现矩阵;
2)计算任意两行用户相似度,得到用户相似度矩阵;
3)针对某个用户选出与其最相似的个用户,是超参数;——召回阶段
4)基于这个用户,计算对每个物品的得分;
5)按照用户的物品得分进行排序,过滤已推荐的物品,推荐剩下得分最高的个。——排序阶段
第2步中,怎么计算用户相似度?——使用共现矩阵的行
以余弦相似度为标准,计算和之间的相似度:
第4步中,怎么每个用户对每个物品的得分?
假如和用户最相似的2个为和:
对物品的评分为1,用户对物品的评分也为1,那么用户对的评分为:
也就是说:利用用户相似度对用户评分进行加权平均:
其中,为用户和用户之间的相似度,为用户和物品之间的相似度。
UserCF的缺点
1、现实中用户数远远大于物品数,所以维护用户相似度矩阵代价很大;
2、共现矩阵是很稀疏的,那么计算计算用户相似度的准确度很低。
IteamCF
算法步骤:
1)得到共现矩阵;
2)计算任意两列物品相似度,得到物品相似度矩阵;
3)对于有正负反馈的,获得用户正反馈的物品;
4)找出用户正反馈的物品最相似的个物品,组成相似物品集合;——召回阶段
5)利用相似度分值对相似物品集合进行排序,生产推荐列表。——排序阶段
最简单情况下一个物品(用户未接触的)只出现在另一个物品(用户已反馈的)的最相似集合中,那么每个用户对每个物品的得分就是相似度。如果一个物品和多个物品最相似怎么办?
如用户正反馈的是和,对于物品其最相似的是,相似度为0.7,对于物品其最相似的也是,相似度为0.6,那么相似度为:
也就是说:如果一个物品出现在多个物品的个最相似的物品集合中,那么该物品的相似度为多个相似度乘以对应评分的累加。
其中,是物品p与物品h的相似度,是用户u对物品p的评分。
第2步中,怎么计算物品相似度?——使用共现矩阵的列
以余弦相似度为标准,计算和之间的相似度:
相似度计算标准
余弦相似度
皮尔逊相关系数
基于皮尔逊相关系数的改进
UserCF与IteamCF的对比
UserCF适用于用户兴趣比较分散变换较快的场景,如新闻推荐。
IteamCF适用于用户情趣不叫稳定的场景,如电商推荐。
协同过滤的优缺点
优点:直观,可解释性强。
缺点:
- 协同过滤记忆能力强,泛化能力弱;
- 具有明显的头部效应(马太效应),很多用户都有对热门物品的历史行为导致绝大多数物品对热门物品的相似度都高;
- 处理稀疏向量能力弱。