python实现基于物品的协同过滤算法

本文详细介绍了基于物品的协同过滤算法(itemCF)的原理和实现过程。首先,阐述了itemCF相较于用户CF的优点和缺点,然后通过分析用户行为数据计算物品之间的相似度,并给出具体的数据处理和相似度计算步骤。接着,展示了源代码实现,包括数据加载、相似度计算和推荐算法。最后,给出了代码运行结果。

一、算法思想

在上篇文章中简单实现了基于用户的协同过滤算法(userCF),该算法存在一些缺点:

  1. 随着用户数量的增加,计算用户相似度矩阵的时间和空间复杂度增长接近 O ( N 2 ) O(N^2) O(N2)
  2. 相比基于物品的协同过滤算法,基于用户的协同过滤算法可解释性稍弱(很难让用户相信:给用户推荐某个商品,原因是有个和该用户兴趣很相似的用户也买了这个商品。用户可能会有疑问:你凭什么说他和我的兴趣很相似)

基于物品的协同过滤算法(itemCF)的思想是给用户推荐 和用户喜欢的商品相似的商品,这就涉及到如何计算两个商品的相似度了。itemCF 中并不是利用物品本身的内容属性来计算相似度(这是基于内容的推荐),而是通过分析用户行为记录(评分、购买、点击、浏览等行为)来计算两个物品的相似度,同时喜欢物品A和物品B的用户数越多,就认为物品A和物品B越相似。下面介绍该算法的实现过程。

二、实现思路

  1. 数据集
    本实现使用的数据集也是 MovieLens 提供的数据:
    MovieLens数据集
    下载地址:MovieLens数据集
    加载解压后为:
    数据集解压后
    我们使用 ml-latest-small 文件夹下的 ratings.csv 文件:
    ratings.csv
    该数据集中的数据格式为:
    数据集格式

userId : 用户 ID
movieId : 用户看过的电影 ID
rating : 用户对所看电影的评分
timestap : 用户看电影的时间戳

  1. 定义变量

N : 记录电影被多少用户看过,如: N[“1”] = 10 表示有10个用户看过ID 为 “1”的电影;
W : 相似矩阵,存储两个用户的相似度,如:W[“1”][“2”] = 0.66 表示ID 为 “1” 的电影和 ID 为 “2” 的电影相似度为 0.66 ;
train : 用户记录数据集中的数据, 格式为: train= { user : [[item1, rating1], [item2, rating2], …], …… }
k : 使用最相似的 k 个电影
n : 为用户推荐 n 部电影

  1. 加载数据
    从数据集中读出数据,将数据以 { user : [[item1, rating1], [item2, rating2], …],……} 的形式存入 train 中。
  2. 计算物品相似矩阵
    本实现中物品相似度的计算公式为:
    W i j = N ( i ) ⋂ N ( j ) N ( i ) ∗ N ( j ) W_{ij}=\frac{N(i)\bigcap N(j)}{\sqrt{N(i)*N(j)}} Wij=N(i)N(j) N(i)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值