推荐系统MF——SVD与SVD++矩阵分解

本文介绍了如何使用SVD和SVD++进行推荐系统的矩阵分解。首先,通过数据处理将用户评分数据转换为矩阵,然后详细解释了SVD的矩阵初始化、损失值计算、随机梯度下降训练和图像绘制。接着,文章提出了SVD++来处理数据的高缺失率问题,通过引入电影之间的相似矩阵改进模型。最后,阐述了SVD++的更新公式和权重更新过程。
摘要由CSDN通过智能技术生成


问题:对movieslen数据集进行电影评分进行预测

1.数据处理

数据集

数据集使用了下载的1M的movieslen数据集,这里主要使用用户评分数据——ratings.csv.数据如下所示主要有用户id,电影id和评分,数据如下。
在这里插入图片描述
接下来对用户和评分矩阵进行矩阵分解,首先要将其变成矩阵。对dataframe进行变换,仅提取出"userId",“movieId”,“rating”,然后变成行为用户id,列变成电影id

data_twe=data[["userId","movieId","rating"]]
data_new=data_twe.set_index(["userId",'movieId'])["rating"].unstack()
data_new

统计得出的数据的各列缺失值,总缺失值,缺失率

#各列缺失值
listlose=data_new.isnull().sum()
lose=listlose.sum()
x,y=data_new.shape
lose/(x*y)

2.SVD

矩阵初始化

SVD奇异值分解实现,将6109724的特征矩阵分解为Q=610K 和P=K*9724的矩阵相称。k设为1000,随机初始化Q,P,因为特征矩阵是评估为[0,5],所以Q,P范围在0到1

k=1000
import numpy as np
Q=np.random.rand(610,k)
P=np.random.rand(k,9724)
Q_np=np.array(Q)
P_np=np.array(P)
data_new_p=np.dot(Q,P)
loss=data_new-data_new_p

浮点数随机的矩阵相乘得出的矩阵与原式相差过大,为了减少初期训练的次数。所以对数据对浮点随机数都除以10,最近得出的拟合矩阵为原本100倍比较接近原本的结果

损失值计算

loss计算:原矩阵非空值,与使用Q,P相乘的所得矩阵的差值的平方和

sub_f=sub**2
sub_f.sum().sum()

随机梯度下降训练

损失值还是比较大的,然后为了拟合,使用随机梯度下降的方法,即随机选原矩阵中非空的一个值,通过特定Q,P拟合矩阵的值,减去偏导。更新修改P,Q矩阵的值。这里学习率U=0.1,(一次)

U=0.1
sub_isnull=sub.isnull()
while(True):
   
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值