itemCF推荐算法的实现

本文介绍了基于ItemCF的协同过滤算法,该算法利用兴趣相近的用户对相同物品的评分来预测用户对未评价物品的喜好。协同过滤分为UserCF和ItemCF,ItemCF具有一定的动态性,即使不实时更新也能进行推荐。算法主要包括计算物品相似度矩阵和根据用户历史行为推荐相似物品。提供了一种实现推荐系统的代码思路。
摘要由CSDN通过智能技术生成

基于ItemCF的协同过滤算法

实训需要实现一个推荐系统,所以先实现了一个比较简单的协同过滤算法

协同过滤的思想来源是充分利用集体智慧,即在大量的人群的行为和数据集中收集答案,以帮助我们对整个人群得到统计意义上的结论:
协同过滤算法有两个基本出发点:

  1. 兴趣相近的用户可能会对同样的东西感兴趣;
  2. 用户可能较偏爱与其已购买的东西相类似的商品。

基于1的就是UserCF
基于2的就是ItemCF

这两个算法各有千秋,但是它们都需要离线计算,一般以天为单位更新
众所周知,用户可能产生新的行为,浏览新的物品,
这时候虽然ItemCF的相似度矩阵没有更新,但是仍然可以使用为用户推荐,
所以虽然ItemCF需要离线计算,但是它也具有一定的动态性
(一般来说,用户相似度变化要比物品相似度变化快)

ItemCF的步骤可以大致分为两个部分

  1. 将物品的用户当作物品的特征向量,然后物品产品之间的相似度,得到物品相似度矩阵
  2. 从用户已经产生行为的物品中找到于其相似的K个物品(从相似度矩阵中),两次加权累和(用户产生行为物品的评分*相似物品相似度),找出评分最高的N件物品推荐给用户

然而具体实现可以参考以下代码:

import random
import math
from operator import itemgetter
class ItemBasedCF:
    # 初始化参数
    def __init__(self):
        # 找到相似的20个菜谱,为目标用户推荐10个菜谱
        # K值:找到和已经看过菜谱最相似的20个菜谱
        self.n_sim_cookbook = 20
        # N值: 将其中前10名推荐给用户
        self.n_rec_cookbook = 10

        # 将数据集划分为训练集和测试集
        self.trainSet = {}
        self.testSet = {}

        # 用户相似度矩阵
        self.cookbook_sim_matrix = {}
        self.cookbook_popular = {}
        self.cookbook_count = 0

        # print('Similar cookbook number = %d' % self.n_sim_cookbook)
        # print('Recommended cookbook number = %d' % self.n_rec_cookbook)

    # 读文件得到“用户-菜谱”数据(基于比例划分数据)
    def 
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值