基于物品的协同过滤算法(ItemCF)给用户推荐那些和他们之前喜欢的物品相似的物品。比如:该算法会因为你购买过《数据挖掘导论》而给你推荐《机器学习》。不过ItemCF算法不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大相似度的原因是因为喜欢物品A的用户大都也喜欢物品B。
基于物品的协同过滤算法主要分为两步。
1. 计算物品的相似度
1.1遍历训练数据,统计喜欢每个物品的用户数,存入movie_popular列表中,如movie_popular[i]表示喜欢电影i的用户数。
1.2建立物品相似度矩阵
如下图所示,左图为训练数据格式,右图为矩阵C,遍历训练数据,计算出喜欢两两物品用户数,填入矩阵C中,如同时喜欢物品a和物品b的用户有1人,则C[a][b] = 1。
得到矩阵C后,利用如下公式计算物品之间的相似度。表示物品i和物品j的相似度,N(i)表示喜欢物品i的用户数,分子表示同时喜欢物品i和j的用户数。因此,该公式可以理解为喜欢物品i的用户中有多少比例的用户也喜欢物品j。
物品相似度计算公式的改进:上述公式存在一个问题,如果物品j很热门,很多人都喜欢,那么就会很大,接近于1。因此上述公式会造成任何物品都会和热门的物品有很大的相似度,这对于致力于挖掘长尾信息的推荐系统来说显然不是一个好的特性。为了避免推荐出热门的物品,可以用下面的公式:
这个公式惩罚了物品j的权