surprise推荐系统工具-Baseline算法、Slope One算法详解及movieLens案例

surprise推荐系统工具

surprise推荐系统工具下有很多推荐算法:
在这里插入图片描述
本文主要讲一下Baseline算法和SlopeOne

Baseline算法

论文地址:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.476.4158&rep=rep1&type=pdf
Baseline算法是一种基于统计基准分数进行预测的算法。
bui为预测值;
u为均值;
bu为用户偏好;
bi为商品差异。
在这里插入图片描述
结合原文进行解释。1.我们知道所有电影的平均评分为3.7,即u=3.7;
2.然而泰坦尼克号电影是部好电影,评分要好于平均电影的评分,大约高了0.5,即bi=0.5;
3.然而Joe是个吝啬的人,他打分比较低,一般比平均低0.3,即bu = -0.3
最后预测Joe对泰坦尼克号的打分为3.7+0.5-0.3 = 3.9
目标函数为:
在这里插入图片描述
如何求目标函数呢?变量有bu和bi两个。可以用ALS或者SGD作为优化方法。
使用ALS进行优化
在这里插入图片描述

Step1,固定bu,优化bi
Step2,固定bi,优化bu
ALS、SGD优化方法:
推荐算法-矩阵分解(Matrix Factorization,MF)

Slope One算法

论文地址:https://arxiv.org/pdf/cs/0702144.pdf
Slope One算法是一种基于item-base的协同过滤算法。
在这里插入图片描述
论文指出当对userb-itemj评分进行预测时,查看itemi-itemj之间的差异。即userb-itemj = 2+(1.5-1)=2.5 .表示从usera看itemj比itemi要高0.5,同理,对于userb,itemj也比itemi要高0.5。
SlopeOne算法:
Step1,计算Item之间的评分差的均值,记为评分偏差(两个item都评分过的用户):
在这里插入图片描述
Step2,根据Item间的评分偏差和用户的历史评分,预测用户对未评分的item的评分:
在这里插入图片描述
在这里插入图片描述
Step3,将预测评分排序,取topN对应的item推荐给用户

Baseline算法、Slope One算法用到movieLens数据集

#数据集来源:https://www.kaggle.com/jneupane12/movielens/download
#baseline论文:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.476.4158&rep=rep1&type=pdf
#surprise文档:https://surprise.readthedocs.io/en/stable/
from surprise import Dataset
from surprise import Reader
from surprise import BaselineOnly
from surprise import accuracy
from surprise.model_selection import KFold

#数据读取
reader = Reader(line_format='user item rating timestamp',sep = ',',skip_lines=1)
data = Dataset.load_from_file('./ratings.csv',reader = reader)
train_set = data.build_full_trainset()

#ALS优化,优化方式可以选其他的('SGD')
#设置user、item的正则化项
bsl_options = {'method':'als','n_epochs':5,'reg_u':12,'reg_i':5}
model = BaselineOnly(bsl_options=bsl_options)

#k折交叉验证
kf = KFold(n_splits=5)
for trainset,testset in kf.split(data):
    model.fit(trainset)
    pred = model.test(testset)
    #计算RMSE
    accuracy.rmse(pred)

uid= str(300)
iid = str(180)

#输出uid对iid 的预测结果
pred = model.predict(uid,iid,r_ui=4,verbose=True)

输出结果如下:

Estimating biases using als...
RMSE: 0.8586
Estimating biases using als...
RMSE: 0.8632
Estimating biases using als...
RMSE: 0.8626
Estimating biases using als...
RMSE: 0.8641
Estimating biases using als...
RMSE: 0.8616
user: 300        item: 180        r_ui = 4.00   est = 3.58   {'was_impossible': False}
#SlopeOne论文:https://arxiv.org/pdf/cs/0702144.pdf
from surprise import Dataset
from surprise import Reader
from surprise.model_selection import KFold
from surprise import SlopeOne
from surprise import accuracy

reader = Reader(line_format= 'user item rating timestamp',sep = ',',skip_lines=1)
data = Dataset.load_from_file('./ratings.csv',reader = reader)
trainset = data.build_full_trainset()

#使用SlopeOne算法
algo = SlopeOne()
algo.fit(trainset)
#对指定用户和商品进行评分预测
uid =str(200)
iid = str(100)
pred = algo.predict(uid,iid,r_ui=4,verbose=True)

输出结果如下:

user: 200        item: 100        r_ui = 4.00   est = 3.41   {'was_impossible': False}

代码地址:推荐系统 surprise工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝翔厨师长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值