推荐算法理论与实践(差代码)

本文介绍了电影推荐系统的原理及实现过程,包括基于内容的推荐、协同过滤等方法,并探讨了推荐系统的评估指标,如召回率、精确率等。

课程地址:https://www.imooc.com/learn/990

一、课程介绍

 221522_Gd1n_3018050.png 

221613_xNSH_3018050.png

221630_kFrq_3018050.png

二、推荐系统基本概念

1.电影推荐系统原理

2.基于内容的推荐系统

221702_LHDJ_3018050.png

221857_74mT_3018050.png

221907_9705_3018050.png

222100_YL8w_3018050.png

3.基于矩阵分解的协同过滤 

222230_tV1L_3018050.png

222252_Hs78_3018050.png

得到方式:1.在线问卷调查

合并公式:

222328_3OcF_3018050.png

目标:最小化这个公式的结果

只需要用户对电影的评分即可

203751_WlYm_3018050.png

两个高纬向量

4.基于item的协同过滤和基于用户的协同过滤

204022_CT9h_3018050.png

204100_aIQ8_3018050.png

204123_h98H_3018050.png

204149_BZ64_3018050.png

204242_7aM2_3018050.png

204312_GIVE_3018050.png

204526_Caua_3018050.png

根据与用户u相似的其他用户对商品i的评分,来推测用户u对商品i的评分

5.冷启动问题

之前的方法是基于用户已经看过一些电影,买过一些商品并且进行了评分,因此具备该用户信息,以便推荐

但是新用户并没有,这就是冷启动

204831_u6iP_3018050.png

6.基于内容的推荐的优缺点

204929_OlRS_3018050.png

205000_kvQ4_3018050.png

7.基于协同过滤的推荐的优缺点

205045_2SgA_3018050.png

205123_ieJF_3018050.png

gray sheep 当没有相似的时候,无法推荐

205154_z7Mg_3018050.png

shiling attack:被刷分影响

8.混合算法

205641_mTvy_3018050.png

mixed:使用多个推荐系统同时进行推荐,将推荐结果同时推送给用户

feature combination:将多个推荐系统使用的特征组合起来,提供给另外一个推荐系统

cascade:一个推荐系统产生推荐结果之后,用另一个推荐系统进一步筛选,将筛选的结果推荐给用户

switching:根据当前的状态,在不同的推荐系统之间进行切换

9.推荐系统性能评估

205724_upkt_3018050.png

205758_gREs_3018050.png

205848_m9tY_3018050.png

205900_JOWI_3018050.png

210018_ecKd_3018050.png

recall=6/10=0.6

单单使用recall评估是不行的

210145_jOGR_3018050.png

precision=6/50=0.12

可以将recall和precision结合起来,都比较大的时候是比较好的

210225_fhrG_3018050.png

210301_JxEJ_3018050.png

210320_B5AM_3018050.png

tp:如果推荐系统预测用户A会买商品i,而实际也如此

fp:如果推荐系统预测用户A会买商品i,而实际并没有

tn:如果推荐系统预测用户A不会买商品i,而实际也没有买

fn:如果推荐系统预测用户A不会买商品i,而实际买了

210645_2Rz2_3018050.png

F的值越大说明推荐系统性能越好

并不是说推荐系统性能越好,推荐系统越好,对于商业化的推荐系统来说,获得更大的利润的推荐系统才是最好的

210821_J2iE_3018050.png

A/B testing:将用户分组,对不同组的用户用不同的推荐系统进行推荐,最后看看哪个分组的推荐系统的性能较号。小号计算资源

210951_LvMH_3018050.png

假设一个推荐系统向用户A推荐了10次,用户A点击了3次

CTR=3/10=0.3

CTR越高说明用对商品越感兴趣

如果还想知道用户不但点击了商品,是否还听完了歌曲,看完了文章,就要看CR(转换率)

CR越高,说明用户的体验越好,推荐系统性能越好

211255_svEX_3018050.png

用来度量不同投资对应的回报,推荐系统中ROI越大性能越好

可以将回报定义为:利润增加,收听量增加,阅读量增加等

将代价定义为计算资源成本

关键在于:定义合理的回报和投资

有时候仅凭算法来度量推荐系统的性能会出现奇怪的地方,最好成立QA小组来测试推荐系统,根据个人经验来评断

10.评估总结

211914_3Itz_3018050.png

快速构建多个合适的推荐系统=》制定评估推荐系统的标准=》进行线下评估=》将选择得到的模型进行线上评估

选择A/Btesing的方式来选择推荐系统

评估方式结合CTR,CR,ROI,QA来进行综合评估

最后的到可靠的推荐系统

三、电影推荐系统实践(线下评估方式)

1.基于矩阵分解的电影推荐系统

(1)收集数据

212204_GWIt_3018050.png

212212_I2V8_3018050.png

数据集下载(需要翻墙):https://grouplens.org/datasets/movielens/

(2)准备数据

212354_YXFJ_3018050.png

212513_wXn9_3018050.png

212550_Fs17_3018050.png

movield并不是行号,远远大于行号,矩阵过大,计算占用过大

212658_FCDg_3018050.png

增加movieRow行号,以便计算

212926_2RU8_3018050.png

把处理好的数据保存到文件中

212951_eAvk_3018050.png

213110_9Rj1_3018050.png

213101_3gzN_3018050.png

合并后的信息

213251_P5Zo_3018050.png

213301_bviE_3018050.png

用户编号,电影编号,评分

213545_3kR8_3018050.png

214054_mKfw_3018050.png

214140_Fjyc_3018050.png

rating为0表示没有评分,为1表示评分了

214157_pSgA_3018050.png

将布尔值转化为0,1

(3)模型构建

214909_p1vc_3018050.png

214922_ti1G_3018050.png

 

数据集中有的行全部是0,214942_5tGA_3018050.png计算结果是nan

必须进行处理

215018_DGj3_3018050.png

215056_Pb6f_3018050.png

处理是0的部分

214024_6d7C_3018050.png

两个矩阵初始化,对两个矩阵相乘,transpose_b=True对第二个矩阵转置。行1和行2相加

214115_uFaD_3018050.png

这里将正则化项拉姆达设置为1,可以通过调整拉姆达来看模型性能的变化

214243_BKal_3018050.png

le-4是10的-4次方

(4)训练模型

214635_dtd0_3018050.png

第一个参数loss是对要可视化变量起名,第二个loss是要保存可视化变量

214814_TkSP_3018050.png

只对loss汇总

214829_1NVr_3018050.png

定义路径名

214856_F7zN_3018050.png

把信息保存到文件中

215208_uCMO_3018050.png

开始训练模型。

不重要的变量可以用_表示,每次训练的train都会保存到_里面,summaryMerged都会保存到movie_summary里面

215255_uUnS_3018050.png

打开cmd操作界面,切换到保存数据的路径当中

在浏览器中打开http://127.0.0.1:6006

215315_uQaA_3018050.png

215440_v1IV_3018050.png

215352_9BKu_3018050.png

看到代价值随着迭代次数增加不断减少的

(5)评估模型

直接使用设定的

215747_Dval_3018050.png

电影内容矩阵和用户喜好矩阵相乘,再加上每一行的均值,得到完整的电影评分表

215844_BOFJ_3018050.png

计算预测值与真实值之间的惨差值的算数平方根

2.线性回归原理与实战

215957_j1vF_3018050.png

220023_7qr5_3018050.png

220030_XH3N_3018050.png

220051_DjWP_3018050.png

代价函数。目标:最小化代价函数的值,使用梯度下降算法

220131_vCj6_3018050.png

线性回归函数直线

(1)收集数据

220158_byAc_3018050.png

数据集:http://http:archive.ics.uci.edu/ml/machine-learning-databases/concrete/compressive

(2)加载数据集

220444_oFP8_3018050.png

220544_PPXx_3018050.png

加载数据集

220611_sOQi_3018050.png

220617_MDi8_3018050.png

查看数据集

原始数据集名称太长

220643_aD2M_3018050.png

特征名字很长

220734_hCYd_3018050.png

重新命名特征名

220756_C7uA_3018050.png

将目标变量和数据相分离

(3)选择模型

使用交叉验证来评估模型的性能:

221213_ZADQ_3018050.png

221337_1G7C_3018050.png

评估线性回归在原始数据集上的性能:

221440_RXHV_3018050.png

得到列表

221450_9Suv_3018050.png

对列表求平均值,这个就是最终得分

221619_6W9D_3018050.png

有的数据集中的数据没什么用,删除这样的特征,看看性能有没有变化

越接近1越好,删除的fly特征下降,说明fly特征有用

(4)保存模型

221831_CFpI_3018050.png

创建缩放器

221850_LEjv_3018050.png

数据集标准化

221910_gVVc_3018050.png

训练

221944_9WFL_3018050.png

将模型和缩放器保存

3.构建混凝土抗压强度预测系统

(1)加载模型

222122_gr0d_3018050.png

(2)构建预测系统

222344_zqyV_3018050.png

222414_XJj1_3018050.png

 

4.电影推荐系统

(1)收集数据

222716_b3n7_3018050.png

222723_5dc0_3018050.png

数据集:https://grouplens.org/datasets/movielens/

222839_TweX_3018050.png

(2)准备数据

222911_u6bl_3018050.png

222917_voSK_3018050.png

加载

222951_KpjX_3018050.png

加载movies.csv文件,序号太大不适合行号

223102_kfjp_3018050.png

新增行号movieRow

*筛选movies_df中的特征

223257_Uc7W_3018050.png

223305_ycok_3018050.png

*将ratings_df中的movieid替换为行号

223358_AmZy_3018050.png

223404_cN17_3018050.png

223450_6cyJ_3018050.png

223457_RBhV_3018050.png

筛选之后的信息

*创建电影评分矩阵rating和评分记录矩阵record

223631_Ugle_3018050.png

224132_WYEL_3018050.png

将rating_df中的数据填写到rating当中

224330_gB78_3018050.png

电影评分系统中,所有0的地方表示没有评分,>0表示凭过分

224350_6d1o_3018050.png

布尔值转化成0,1

电影评分表和评分记录表构建完成

(3)构建模型

224728_d7ri_3018050.png

224747_PtlC_3018050.png

数据集中有的是0,要处理

224844_0dkj_3018050.png

224856_aLgR_3018050.png

处理2个矩阵

225014_UQrm_3018050.png

X_parameters电影内容矩阵,Thetga_paramters用户喜好矩阵

正太随机分布

225307_wG8q_3018050.png

225330_kJyh_3018050.png

(4)训练模型

225410_fYGl_3018050.png

225435_DmRW_3018050.png

225459_yLAV_3018050.png

225513_5JlL_3018050.png

(5)评估模型

233314_Akpz_3018050.png

(6)构建完整的电影推荐系统

233513_cv35_3018050.png

233521_SeZg_3018050.png

优化:如果用户看了电影,就要将该系统中电影去掉

转载于:https://my.oschina.net/u/3018050/blog/1812484

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值