基于物品的协同过滤算法(ItemCF)是业界应用最多的算法,主要思想是利用用户之前有过的行为,给用户推荐和之前物品类似的物品。
基于物品的协同过滤算法主要分为两步:
1)计算物品之间的相似度。
2)根据物品的相似度和用户的历史行为给用户生成推荐列表。
第一步的关键点在于计算物品之间的相似度,这里并不采用基于内容的相似性,而是去计算在喜欢物品i的用户中有多少是喜欢物品j的,这样计算的前提是用户的兴趣爱好一般是比较确定的,不容易变,那么当一个用户对两个物品都喜欢的时候,我们往往可以认为这两个物品可能属于同一分类。令N(i)表示购买物品i的用户数,则物品i和物品j的相似度可以用wij = |N(i)&N(j)|/N(i)来计算。
第一步时间复杂度的改进方法:和UserCF类似,我们可以建立一张用户-物品的倒查表,这样每次去计算一个用户有过行为的那些物品间的相似度,能够保证计算的相似度都是有用的,而不用花大的计算量在那些0上面(肯定是个稀疏矩阵)
第一步相似度的改进方法1:若根据上面的公式来计算相似度,你会发现,物品i跟流行物品j的相似度很高,因为流行读高,所以基本人人都会买,这样的话流行度高的物品就比较没有区分度,所以我们需要惩罚流行物品j的权重wij = |N(i)&N(j)|/sqrt(N(i)*N(j))
第一步相似度的改进方法2:需要惩罚用户的活跃度。若用户活跃度比较低,只买了有限的几本书,那么这几本书很有可能在一