使用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$ 是学习率。
经过对所有评分的一次或多次迭代后,就可以完成计算。随机梯度下降在深度学习中也是训练网络的重要部分。
超级会员免费看
订阅专栏 解锁全文
698

被折叠的 条评论
为什么被折叠?



