基于物品的协同过滤算法:理论说明,代码实现及应用
标签: 爬虫 Python
主要参考资料:
项亮. 推荐系统实践[M]. 北京:人民邮电出版社, 2012.
转载请注明出处:http://blog.csdn.net/xuelabizp/article/details/51823458
0.一些碎碎念
从4月中旬开始,被导师赶到北京的郊区搬砖去了,根本就没有时间学习看书,这个时候才知道之前的生活是多么的幸福:每天看自己想看的书,然后实践一下,最后写博文总结一下,偶尔还能去跑个步,游个泳。想找实习的计划也泡汤了,这个项目最早要到七月中下旬才能结束,只能自己挤时间学习了。
逝者如斯夫,不舍昼夜。
1.基于物品的协同过滤算法简介
如今网上信息泛滥,想要在里面找一条适合自己的信息的成本真的有点高,所以就有了推荐系统。于用户而言,推荐系统能够节省自己的时间;于商家而言,推荐系统能够更好的卖出自己的商品。
基于邻域的推荐算法是推荐系统中最基本的算法,该算法分为两大类:基于用户的协同过滤算法(UserCF)和基于物品的协同过滤算法(ItemCF)。
基于用户的协同过滤算法就是找到和“目标用户”相似的用户,然后把他喜欢的东西推荐给“目标用户”。例如小王和小赵一对好基友,他俩喜欢看的书风格基本相同。如果有一天,系统发现小赵给自己的书架添加了一本新书,并且评价很高,那么系统就把这本书自动推荐给了小王,因为小王喜欢这本书的概率很大。设 N ( u ) N(u) N(u)表示用户 u u u喜欢的物品, N ( v ) N(v) N(v)表示用户 v v v喜欢的物品,则两个用户的相似度为:
(1) w = ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u ) ⋃ N ( v ) ∣ w=\frac {\mid N(u)\bigcap N(v)\mid}{\mid N(u)\bigcup N(v)\mid} \tag 1 w=∣N(u)⋃N(v)∣∣N(u)⋂N(v)∣(1)
相比于基于用户的协同过滤算法,基于物品的协同过滤算法在工业界应用更多,因为基于用户的协同过滤算法主要有两个缺点:
- 随着网站的用户数目越来越大,计算用户数的相似度将会越来越困难,其运算的时间复杂度和空间复杂度基本和用户的增长数成平方关系
- 基于用户的协同过滤算法很难对推荐结果做出解释
基于物品的协同过滤算法就是找到和“目标用户”喜欢的物品相似的物品,然后把相似的物品推荐给“目标用户”。例如我很喜欢《黑客帝国》,而《盗梦空间》和《黑客帝国》相似度很高,推荐系统就可以给我推荐《盗梦空间》,实际上我也很喜欢《盗梦空间》。
2.基于物品的协同过滤算法实现
基于物品的协同过滤算法主要有两步:
- 计算物品之间的相似度
- 根据物品的相似度和用户的历史行为给用户生成推荐列表
2.1计算物品的相似度
设 ∣ N ( i ) ∣ |N(i)|