首页 > 代码库 > 推荐算法之基于物品的协同过滤算法
推荐算法之基于物品的协同过滤算法
基于物品的协同过滤算法(ItemCF)是业界应用最多的算法,主要思想是利用用户之前有过的行为,给用户推荐和之前物品类似的物品。
基于物品的协同过滤算法主要分为两步:
1)计算物品之间的相似度。
2)依据物品的相似度和用户的历史行为给用户生成推荐列表。
第一步的关键点在于计算物品之间的相似度,这里并不採用基于内容的相似性,而是去计算在喜欢物品i的用户中有多少是喜欢物品j的,这样计算的前提是用户的兴趣爱好通常是比較确定的,不easy变,那么当一个用户对两个物品都喜欢的时候,我们往往能够觉得这两个物品可能属于同一分类。令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:须要惩处用户的活跃度。若用户活跃度比較低,仅仅买了有限的几本书,那么这几本书非常有可能在一个或者两个兴趣范围内,对计算物品相似度比較实用,可是假设说一书店卖家趁着打折把亚马逊90%的书都买了然后赚差价,那么该用户的行为对计算物品相似度就没什么作用,由于90%的书肯定会覆盖非常多范围,故应该像改进方法一中惩处用户的活跃度。
第一步相似度的改进方法3:物品相似度的归一话。归一化不只能提高推荐的精确度,还能够提高推荐的覆盖率和多样性。比方亚马逊上,用户的兴趣爱好肯定是分成几类的,非常少说爱好集中在一类。如果有两类A和B,A类之间的相似度为0.5, B类之间的相似度为0.8,A和B之间的相似度为0.2, 当用户买了5本A类的书和5本B类的书后,我们要给用户来推荐书,如果依照之前的方法,最后依照相似度排序,那么推荐的应该都会是B类物品,就算B类中排名比較低,但照样比A类要高阿,所以应该依据类别进行相似度的归一话,这样一来A的相似度为1,B的相似度也为1,这种话排序后的推荐A,B类商品都有,就大大提高了精确度,覆盖率和多样性。
第二步则比較简单,计算物品与用户已买物品的相似度(权重和),然后依据相似度排序选出topN.
ItemCF在实际系统中运用的比較多,主要有两个长处:
1)item-item表相比方user-user表要小的多,处理起来比較easy
2)itemCFeasy提供推荐理由,比方给你推荐《机器学习》是由于你之前买过《数据挖掘》,这样能添加信任度,提高用户和推荐系统的交互,进一步增强个性化推荐
推荐算法之基于物品的协同过滤算法