原创博客,转载请注明出处!
1、问题规划
引入一些标记的定义:
n_u 代表用户的数量
n_m 代表电影的数量
如果用户j给电影 i 评过分则 r(i,j)=1
代表用户 j 给电影 i 的评分
是用户 j 的参数向量
是电影 i 的特征向量
是评价了电影 j 的用户数量
2、基于内容的推荐算法
在一个基于内容的推荐系统算法中,我们假设对于我们希望推荐的东西有一些数据,这些数据是有关这些东西的特征。
在我们的例子中,我们可以假设每部电影都有两个特征,如 x_1 代表电影的浪漫程度, x_2 代表电影的动作程度
预测评分为:
针对用户 j ,该线性回归模型的代价为预测误差的平方和,加上正则化项
上面的代价函数只是针对一个用户的,为了学习所有用户,我们将所有用户的代价函数求和
如果我们要用梯度下降法来求解最优解,我们计算代价函数的偏导数后得到梯度下降的更新公式为:
3、协同过滤
在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。
学习算法
注:在协同过滤从算法中,我们通常不使用方差项,如果需要的话,算法会自动学得。
协同过滤算法使用步骤如下:
①初始 x_1 到x_nu,Θ_1 到Θ_nu为一些随机小值
②使用梯度下降算法最小化代价函数
③在训练完算法后,我们预测 ΘjTxi 为用户 j 给电影 i 的评分
通过这个学习过程获得的特征矩阵包含了有关电影的重要数据,这些数据不总是人能读懂的,但是我们可以用这些数据作为给用户推荐电影的依据。
4、协同过滤算法
协同过滤优化目标:
同时最小化
产生一个新的学习假设
协同过滤算法步骤:
①给 x 和Θ初始为小的随机值
②用梯度下降或其它高级优化算法把这个代价函数最小化(注意没有Θ0和 x0)
③最后,给你一个用户具有以下参数Θ,以及给你一部电影带有已知的特征x,我们可以预测该用户给这部电影的评分是ΘTx
5、矢量化:低秩矩阵分解
下面我们介绍有关协同过滤算法的向量化实现,以及说说有关该算法你可以做的其他事情。
举例子:(1)当给出一件产品时,你能否找到与之相关的其它产品。(2)一位用户最近看上一件产品,有没有其它相关的产品,你可以推荐给他。
我将要做的是:实现一种选择的方法,写出协同过滤算法的预测情况。
我们有关于五部电影的数据集,我将要做的是,将这些用户的电影评分,进行分组并存到一个矩阵中。
我们有五部电影,以及四位用户,那么 这个矩阵 Y 就是一个5行4列的矩阵,它将这些电影的用户评分数据都存在矩阵里:
推出评分:
找到相关影片:
一个很方便的方法来度量两部电影之间的相似性:min( || xi - xj ||)
6、实施细节:均值规范化
如果我们新增一个用户 Eve,并且 Eve 没有为任何电影评分,那么我们以什么为依据为Eve推荐电影呢?
我们首先需要对结果 Y 矩阵进行均值归一化处理,将每一个用户对某一部电影的评分减去所有用户对该电影评分的平均值:
然后我们利用这个新的 Y 矩阵来训练算法。 如果我们要用新训练出的算法来预测评分,则需要将平均值重新加回去,预测
ΘjTxi + μ,对于Eve,我们的新模型会认为她给每部电影的评分都是该电影的平均分。