0.一些碎碎念从4月中旬开始,被导师赶到北京的郊区搬砖去了,根本就没有时间学习看书,这个时候才知道之前的生活是多么的幸福:每天看自己想看的书,然后实践一下,最后写博文总结一下,偶尔还能去跑个步,游个泳。想找实习的计划也泡汤了,这个项目最早要到七月中下旬才能结束,只能自己挤时间学习了。 逝者如斯夫,不舍昼夜。 1.基于物品的协同过滤算法简介如今网上信息泛滥,想要在里面找一条适合自己的信息的成本真的有点高,所以就有了推荐系统。于用户而言,推荐系统能够节省自己的时间;于商家而言,推荐系统能够更好的卖出自己的商品。 基于邻域的推荐算法是推荐系统中最基本的算法,该算法分为两大类:基于用户的协同过滤算法(UserCF)和基于物品的协同过滤算法(ItemCF)。 基于用户的协同过滤算法就是找到和“目标用户”相似的用户,然后把他喜欢的东西推荐给“目标用户”。例如小王和小赵一对好基友,他俩喜欢看的书风格基本相同。如果有一天,系统发现小赵给自己的书架添加了一本新书,并且评价很高,那么系统就把这本书自动推荐给了小王,因为小王喜欢这本书的概率很大。设 (1) 相比于基于用户的协同过滤算法,基于物品的协同过滤算法在工业界应用更多,因为基于用户的协同过滤算法主要有两个缺点:
基于物品的协同过滤算法就是找到和“目标用户”喜欢的物品相似的物品,然后把相似的物品推荐给“目标用户”。例如我很喜欢《黑客帝国》,而《盗梦空间》和《黑客帝国》相似度很高,推荐系统就可以给我推荐《盗梦空间》,实际上我也很喜欢《盗梦空间》。 2.基于物品的协同过滤算法实现基于物品的协同过滤算法主要有两步:
2.1计算物品的相似度设 (2) (2)式有一个问题,当物品
3) 2.1.1建立用户物品倒排表ItemCF首先需要建立用户物品倒排表。设用大写字母表示用户,小写字母表示物品,则建立的用户物品倒排表为: 2.1.2计算共现矩阵C共现矩阵C表示同时喜欢两个物品的用户数,是根据用户物品倒排表计算出来的。如根据上面的用户物品倒排表可以计算出如下的共现矩阵C: 2.1.3计算余弦相似度矩阵W共现矩阵C其实就是式(3)的分子,矩阵N表示喜欢某物品的用户数,那么余弦相似度矩阵很容易就计算出来了,示例的矩阵N,以及余弦相似度矩阵如下所示:
2.2根据物品的相似度和用户的历史行为给用户生成推荐列表最终推荐的是什么物品,是由预测兴趣度决定的。物品 例如某个用户喜欢物品a,b和c,对其兴趣度分别为1,2,2. 那么物品d和e的预测兴趣度分别为:
所以应当向该用户推荐物品d。 3.基于物品的协同过滤算法应用之前写了两篇博文,实现了豆瓣书籍信息的爬取: 其中爬取的某项信息很关键,即某书籍的推荐书籍,如下图所示: 假设把《代码大全》看做一个用户,那么这些推荐书籍就可以看做该用户喜欢的物品,在数据库中的形式如下: 将爬取的数据稍微处理一下,一共得到40558本书籍的相关信息,即40558个用户的信息,那么就可以根据这40558个用户的信息计算余弦相似度矩阵,进行书籍推荐。 把整个计算过程封装到一个类里面,依次建立用户物品倒排表,计算共现矩阵C,计算余弦相似度矩阵W。由于计算余弦相似度矩阵W较为费时(本例大概需要20分钟),所以计算之后使用 编写 使用PyQt4编写用户界面,方便搜索,查看,添加,删除和推荐书籍,具体如下: 《统计学习方法》是一本好书,加入到书架中,看看会推荐什么书籍: 4.一些讨论Q:UserCF和ItemCF分别适用于什么情况? Q:UserCF和ItemCF的余弦相似度矩阵W有什么异同? Q:如何评价一个推荐系统的优劣? 5.小结 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|