目录:
1.1 理论分析
1.2 代码解析
1.3 最终结果
1.4 后续工作
1. 带相似度的RSVD算法
1.1 理论分析
1.1.1 RSVD
RSVD,又称“ The Regularized SVD algorithm ”。这模型是接下来改进算法的 Baseline 。
那么接下来就简单介绍一下这个 RSVD 的损失函数和推导公式,迭代方法是 SGD。
- 损失函数
- 推导公式
接下来就是添加相似度进行改进了。
1.1.2 添加相似度的 RSVD
参考论文: An experimental study on implicit social recommendation - Hao Ma
论文中关于损失函数的描述如下:
用户矩阵和项目矩阵通过 SGD(即随机梯度下降)方法更新。
下面两条公式是根据损失函数(即公式 3 )推导得到的。代表含义是:用户矩阵和项目矩阵的更新公式。
从论文中的这段可到 和 的更新公式,代码中严格按照此公式改编
1.2 代码解析
下面是截取整个文件中的部分代码,这里的设计思路主要是根据 1.1 的公式(4)来编写的。
- 的更新方式
sum_pearsion += self.persion_score[u, f] * (self.user_vecs[u, :] -
self.user_vecs[f, :])
self.pearsion_arr = self.persion_reg * sum_pearsion
self.user_vecs[u, :] += self.learning_rate * \
(e * self.item_vecs[i, :] - \
self.pearsion_arr - \
self.user_fact_reg *
self.user_vecs[u, :])
- 的更新方式
self.item_vecs[i, :] += self.learning_rate * \
(e * self.user_vecs[u, :] - \
self.item_fact_reg *
self.item_vecs[i, :])
1.3 最终结果
1.3.1 评价指标
此次对模型的评价指标是 MSE,用来评价模型的准确度以及对比 baseline 模型,看看添加相似度后准度是否有提升。
MSE 的计算公式如下:
1.3.2 对比结果
下面表格是对比结果,模型共两个:baseline 和 添加相似度的 SGD
- 名词解释:
- Iteration:迭代次数
- train_mse:训练集训练时的 MSE
- test_mse:测试集测试时的 MSE
原SGD | Iteration | train_mse | test_mse | 加用户相似度SGD | Iteration | train_mse | test_mse | train_mse 对比提升 | test_mse对比提升 |
---|---|---|---|---|---|---|---|---|---|
1 | 1.141784386 | 1.188415965 | 1 | 13.67562 | 14.20713 | -1097.74% | -1095.47% | ||
10 | 0.917914525 | 1.011238497 | 10 | 6.573647 | 9.61891 | -616.15% | -851.20% | ||
25 | 0.866157052 | 0.963646883 | 25 | 1.179691 | 1.99135 | -36.20% | -106.65% | ||
50 | 0.838677125 | 0.943052707 | 50 | 0.891645 | 1.107708 | -6.32% | -17.46% | ||
100 | 0.754480384 | 0.924777349 | 100 | 0.76197 | 0.948601 | -0.99% | -2.58% | ||
200 | 0.402944841 | 0.917382603 | 200 | 0.514333 | 0.898999 | -27.64% | 2.00% | ||
从表格中可以得到的信息是,在随着训练迭代次数的增加,添加相似度的 SGD 算法与原本未加相似度的 SGD 算法的差距一直再减少,并最终在迭代次数为 200 时,test_mse 的结果比未加的提升了。这表明添加相似度后,模型的泛化能力进一步提高,不容易过拟合。
1.4 接下来的工作
可以考虑给模型添加更多的特征或者其他信息。如时间、地理等信息。来维持模型的长期收益。