31、使用Funk SVD进行矩阵分解与推荐

使用Funk SVD进行矩阵分解与推荐

1. 使用Funk SVD构建分解

在使用Funk SVD构建矩阵分解时,一个重要的问题是如何判断何时结束迭代。由于这是一种启发式方法而非精确解,所以很难确切地说何时结束。通常可以观察评分函数(即试图优化的函数)的变化情况。当评分函数的改进越来越小时,比如每次迭代后函数值仅提高0.0001,这时可能就可以停止迭代。另外,也可以预先设定迭代次数,例如进行150次迭代,达到次数后就停止。

2. 随机梯度下降

之前提到的梯度下降算法也被称为批量梯度下降,因为每次更新参数值时都需要计算所有的误差,这可能会带来大量的计算工作。例如,使用的数据集包含不少于601,263条评分,每次梯度下降算法进行一次迭代,都需要计算这601,263次减法。以下是使用Django模型接口获取评分数量的代码:

In[1]: Rating.objects.all().count()
Out[1]: 601263

另一种高效且有效的方法是随机梯度下降,它每次只考虑一条评分。算法步骤如下:
- 对于每条评分 $r(u, i)$,计算 $e = r_{ui} - \hat{q}_i^T\hat{p}_u$,其中 $\hat{q}_i^T\hat{p}_u$ 是预测评分。
- 更新 $x$,使得 $x \leftarrow x - \alpha * e$,其中 $\alpha$ 是学习率。

经过对所有评分的一次或多次迭代后,就可以完成计算。随机梯度下降在深度学习中也是训练网络的重要部分。

3. 进行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值