基于物品的协同过滤算法

基于物品的协同过滤算法通过计算物品之间的相似度来预测用户评分,建立用户-物品倒排表,对共现矩阵加1并归一化得到物品的余弦相似度,以此生成推荐列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础算法
(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。
购买了该商品的用户也经常购买的其他商品。从这句话的定义出发,我们可以用下面的公式定
义物品的相似度:
在这里插入图片描述
从上面的定义可以看到,在协同过滤中两个物品产生相似度是因为它们共同被很多用户喜
欢,也就是说每个用户都可以通过他们的历史兴趣列表给物品“贡献”相似度。这里面蕴涵着一
个假设,就是每个用户的兴趣都局限在某几个方面,因此如果两个物品属于一个用户的兴趣列表,
那么这两个物品可能就属于有限的几个领域,而如果两个物品属于很多用户的兴趣列表,那么它
们就可能属于同一个领域,因而有很大的相似度。
和 UserCF 算法类似,用 ItemCF 算法计算物品相似度时也可以首先建立用户 — 物品倒排表(即
对每个用户建立一个包含他喜欢的物品的列表),然后对于每个用户,将他物品列表中的物品两
两在共现矩阵 C 中加 1 。
图中最左边是输入的用户行为记
录,每一行代表一个用户感兴趣的物品集合。然后,对于每个物品集合,我们将里面的物品两两
加一,得到一个矩阵。最终将这些矩阵相加得到上面的 C 矩阵。其中 C[i][j] 记录了同时喜欢物品 i
和物品 j 的用户数。最后,将 C 矩阵归一化可以得到物品之间的余弦相似度矩阵 W 。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基于物品的协同过滤算法进行评分预测

#数据集说明:movies.dat中数据是用户对电影的评分。数据格式:UserID::MovieID::Rating::Timestamp。
# -*- coding=utf-8 -*-
# -*- coding: utf-8 -*-
# 基于项目的协同过滤推荐算法实现
import random
import math
from operator import itemgetter
import csv
import pandas as pd

class ItemBasedCF():
    # 初始化参数
    def __init__(self):

        self.n_sim_movie = input('请输入用于推荐参考的电影数K:')
        self.n_rec_movie = input('请输入对一个用户的推荐数:')

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

        # 初始化电影相似度矩阵
        self.movie_sim_matrix = {
   
   }
    
        self.movie_popular = {
   
   }
        self.movie_count = 0
        # 找到相似的10部电影,为目标用户推荐4部电影
        print ('='*100)
        print('一、初始并加载、划分数据......')
        print("参考电影数 =", self.n_sim_movie)
        print("推荐电影数 =", self.n_rec_movie)

    # 读文件得到“用户-电影”数据,并将数据划分为训练集与数据集
    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<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值