基于物品的协同过滤算法
基于物品的协同过滤算法 (item_based collaborative filtering)是应用较多的算法。
ItemCF不是通过物品间的属性直接去计算它们的相似程度, 而是通过用户的行为记录去计算物品之间的相似度。
物品的协同过滤算法主要分为两个步骤:
(1)通过用户之间的行为记录去分析两个用户之间的相似度。
(2)根据用户的相似度和用户的历史行为给用户生成推荐表。
步骤①:计算物品之间的相似度。
方法一:
其中,N(i) 代表对物品i有过行为的用户集合, N(j) 代表对物品j有过行为的用户集合.
缺陷:在这个相似度的求解办法中,有一个缺陷, 比如当物品i是一个非常人们的商品时, 这个相似度的值会非常贴近1.
所以用下面惩减的方式。
方法二:
但是这样的方式任然有缺陷, 用项亮的《推荐系统实战》中的说法:一个买了十几本书的文学青年用户和一个开书店的用户买了大量的书对于兴趣相似度计算的影响是不一样的。
Hohn S.Breese 在“Empirical Analysis of Predictive Algorithms for Collaborative Filtering” 中提出用IUF(Inverse User Frequence)的相似度可以修正这种活跃用户对相似度的贡献小于不活跃用户的情况:
这种做法的惩罚机制缺失让推荐系统有更好的用户贡献计算机制, 当然这只是一种软性的惩罚。
在实际的操作过程中,有时候采用更加硬性的惩罚机制,直接将这类用户删除后用方法二再来计算相似度。
归一化
相似度的归一化 也可以为推荐系统提高覆盖率和多样性。
因为物品总是属于很多不同的类, 而每一类中的物品联系比较紧密。
在一个电影网站中, 有纪录片和动画片两种电影,所以ItemCF计算出来的结果一般是纪录片和纪录片的相似度以及动画片和动画片的相似度大于纪录片和动画片之间的相似度。
将这两类电影分为A,B两类。 其中A与A的相似度为0.5, B和B之间的相似度为0.6, A和B之间的相似度为0.2。
在这种情况下 如果一个用户同时喜欢了同样数目的A类 和 B类 电影,那么ItemCF给他推荐的就全部回事B类的电影。
所以 应用归一化以后,A类 电影和 B类电影的相似度都会变为1,这样就可以得到更有效的推荐。
步骤②:计算 用户u 对 物品j 的感兴趣程度
其中N(u)是用户u喜欢的物品的集合, S(j,K)是和物品j最相思的K个物品的集合。是 用户u 对 物品i 的兴趣。
对于隐形数据集, 的值就为1。
图来自《推荐算法实践》。