问题规划
推荐系统是一种人工智能算法,通常与机器学习相关。推荐系统经过训练,可使用收集的数据了解用户的偏好、兴趣,高度个性化地预测消费者兴趣和要求。 例如,电影预测评分,现在有5部电影和4个用户,要求用户为电影打分。
下文所出现字母:
从上表所给信息可以看出,前三部电影是爱情片,后两部是动作片,Alice和Bob似乎更倾向于爱情片, 而Carol和Dave似乎更倾向于动作片,而且并没有一个用户给所有的电影都打过分。我们希望构建一个算法来预测他们每个人可能会给他们没看过的电影打多少分,并以此作为推荐的依据。
所以,在上述例子中,预测结果如下所示。
基于内容的推荐算法
在一个基于内容的推荐系统算法中,我们假设对于我们希望推荐的东西有一些数据,这些数据是有关这些东西的特征。在电影预测评分的例子中,我们可以假设每部电影都有两个特征,如x1代表电影的浪漫程度,x2代表电影的动作程度,则每部电影都有一个特征向量,如x1是第一部电影的特征向量为[0.9 0]。
针对用户j,该线性回归模型的代价为预测误差的平方和,加上正则化项:
再使用梯度下降更新,求最优解
协同过滤
在之前的基于内容的推荐系统中,对于每一部电影, 我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。但是,如果当我们既没有用户的参数,也没有电影的特征,这两种方法就都不可行了。
我们可以随机选取θ向量计算得到特征数值,然后再通过线性回归去更新θ,这样不停的迭代直到最后的收敛。
我们也可以将两种函数合并为一个目标函数:
算法主要步骤为:
即
向量化:低秩矩阵分解
我们可以把n个用户对m部电影的评分结果表示为m×nm\times nm×n的矩阵。
这个矩阵可以表示为XθT。
通过特征值之间的偏差,我们可以找到类型相近的电影。
均值归一化
之前参数θ和特征X,都是基于每个用户对多个电影进行的评分,每部电影也被多个用户评分。对于新用户,他可能还没有对任何一部电影进行评分,一种思路就是把所有用户对每部电影的评分的均值作为新用户的初始评分。
相关资料来源:B站 CSDN