推荐系统运作假设
- 推荐系统实行五星评分制
- 用户已经对一部分电影进行了评分
- 多数电影用户没有看过,推荐系统需要猜测用户对这些电影的评分向用户推荐预测高分的电影
- 一个电影可以从多个特征方面刻画,形成特征集
因此,我们的方式是,可以通过用户已经评分的一部分电影去确认用户的口味,也即用户对某一特征的评分预期。进而通过电影的多个特征求得预测评分。
用户对特征集的预期评分我们使用向量来表示。特征集每一个分量用实数值衡量电影偏向各个特征的程度。
故对某一电影的评分预期
推荐系统变量预设
基于内容的推荐算法和协同过滤
对于一个用户,我们获取其对特征集的预期评分向量的方式是,找到使得预设代价函数最小的。
故得到初始计算公式(注意正则化):
除去常数,得到对一个用户训练的代价函数公式为:
而我们的系统中有很多用户,故为了得到每一位用户的“口味”,新的用于训练的总代价函数为:
之后,我们采用梯度下降得到各个用户的向量值。此时发现,k=0的情况是被单独列出的,因为它不在正则化目标中。
这个算法可以进一步求得电影预测评分的前提是,电影的特征向量的各个分量的值已经获知。但实际上对于海量电影,我们很难预先将每个电影的特征值都完整给出。那么怎么办呢?
这就需要我们利用已知的评分数据,将给定的,带入预测算法,求得最符合的各个电影的特征向量值。
一个用户:
多个用户:
而基于两者互相导出的关系,我们似乎陷入了鸡生蛋蛋生鸡的循环。
怎样才能使得算法系统运行起来呢?这就需要我们设计出一个同时确定二者的算法。
推荐系统评分预测的协同过滤最终算法
我们结合两者的计算方式:
得到新的代价函数:
其中,和都是n维向量,取消了第0项。
最终我们的算法归纳如下:
- 我们随机初始化和的各个分量为较小的数字。
- 使用梯度下降算法,求得使得新的代价函数最小的各个用户的和向量。
- 对于每一个用户和每一个电影,通过计算得到最终预测评分。
推荐系统协同过滤算法的向量化实现——低秩矩阵分解
此时,我们计算得到最终预测评分。
基于相似度的推荐系统实现
我们如何得到一些和某个电影内容相似的电影,作为推荐选项提供给用户呢?
对于一个新的电影我们已知它和参照电影的特征向量和,所以我们计算二者之间的距离,即可选出距离相对较小的电影。
未评价用户的评价机制——均值规范化
由我们的代价函数计算机制得知,当评价矩阵中某用户没有对任何一个电影的评分时,我们不仅很难获取该用户的口味倾向,更由于进行了正则化,求得其的各个分量均为0,故当使用它预测电影得分时,所有电影得分都是0。这就失去了参考意义。
所以我们推出一种均值规范化的方法,主要思想是计算出每个电影的平均得分,在训练之前将数据集中的已知评分矩阵中的得分都减去这个均值,得到某电影的模型预测得分后再加上成为最终衡量得分。这样那些原本没参与过任何一个电影的评分的用户,其对各个电影的预计得分将为电影的平均分,这使得推荐系统的得分具有了实际意义。