python实现基于物品的协同过滤(ItemCF)电影推荐算法

最近,因为导师项目需要,花了几天时间学习了项亮的《推荐系统实践》,并用python实现了书上的Item Collaborative Filtering即基于物品的协同过滤算法,发现很多博客在算法的代码的实现上说得很笼统,而且项亮的书中关于协同过滤的代码实现写得又很零碎,故写此文总结。

什么是协同过滤

协同过滤是推荐系统中最经典和常用的算法,其核心思想就是它的名字:利用所有用户的历史行为数据,用户通过不断地和网站互动,使推荐列表能够不断过滤掉用户不感兴趣的物品,从而越来越满足需求。

协同过滤分为两大类:

  1. 基于用户的协同过滤(UserCF):当要给目标用户进行推荐时,先找出与他相似的其他用户,再从那些用户喜欢的项目中找出目标用户没有看过的项目推荐给他。
  2. 基于项目的协同过滤(ItemCF):先找出目标用户历史观看列表里与之相似的其他项目,再对这些相似项目进行排序并生成最后的推荐列表。

评分预测还是TopN推荐?

评分预测和TopN推荐是推荐系统两种衡量预测准确度的指标,大多数的推荐研究都是基于评分预测来展开的,主要是因为从事这方面早期研究的组织GroupLens主要就是针对电影评分进行的,而且Netflix等推荐算法的大赛也主要是在解决评分预测问题,然而,评分高就是好的推荐吗?当然不是,有时候用户给出好的评分并不代表他最想看它或者购买它。

部分代码实现

  1. 记载数据集并划分训练集与测试集
    def get_dataset(self, filename, pivot=0.75):

        trainSet_len = 0
        testSet_len = 0
        for line in self.load_file(filename):
            user, movie, rating, timestamp = line.split(',')
            if(random.random() < pivot):
                self.trainSet.setdefault(user, {
   })
                self.trainSet[user][movie] = rating
                trainSet_len += 1
            else:
                self.testSet.setdefault(user, {
   })
                self.testSet[user][movie] = rating
                testSet_len += 1
        print('划分训练集与测试集成功!')
        print('训练集长 = %s' % trainSet_len)
        print(
  • 10
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值