推荐系统
这里以电影推荐的栗子来说明什么是推荐系统。
nu
代表用户的数量
nm
代表电影的数量
r(i,j) 如果用户给电影评过分,则r(i,j)=1
y(ij)
代表用户i给电影j的评分
mj
代表用户j评过分的电影总数
θ (j)
代表用户j的参数向量
x(i)
代表电影i的特征向量
如图所示,推荐系统能够帮我们自动地填上这些缺失的数值,然后向用户推荐新的他可能感兴趣电影 。
1、基于内容的的推荐(给定 x 求 θ 或者给定 θ 求 x)
对每个用户使用不同的线性回归模型进行拟合,并预测用户对其余电影的评价。对于用户 j 和电影 i,我们预测评分为: ( θ (j))Tx(i)
(1)已知电影特征 x 求用户的参数 θ
优化目标为:
min θ 1,…, θ numin θ 1,…, θ nu12∑nuj=1∑i:r(i,j)=1(( θ (j))Tx(i)−y(i,j))2+ λ 2∑nuj=1∑nk=1( θ (j)k)2
其中,i:r(i,j) 表示只计算评过分的电影。
如果用梯度下降法来求解最优解,梯度下降的迭代更新公式为:
θ (j)0:= θ (j)0− α ∑i:r(i,j)=1(( θ (j))Tx(i)−y(i,j))x(i)0
θ (j)k:= θ (j)k− α (∑i:r(i,j)=1(( θ (j))Tx(i)−y(i,j))x(i)k+ λ ⋅θ (j)k)
(2)已知用户的参数 θ 求电影特征 x
优化目标为:
minx1,…,xnmminx1,…,xnm12∑nmj=1∑i:r(i,j)=1(( θ (j))Tx(i)−y(i,j))2+ λ 2∑nmj=1∑nk=1(x(j)k)2
2、协同过滤
如果我们既没有用户的参数,也没有电影的特征,这两种方法都不可行了,协同过滤算法可以同时学习这两者。
代价函数优化为:
J(x(1),…,x(nm), θ 1,…, θ nu)=12∑i:r(i,j)=1(( θ (j))Tx(i)−y(i,j))2+ λ 2∑nmj=1∑nk=1(x(j)k)2+ λ 2∑nuj=1∑nk=1( θ (j)k)2
使用梯度下降的迭代更新公式为:
x(i)k:=x(i)k− α (∑i:r(i,j)=1(( θ (j))Tx(i)−y(i,j)) θ (i)k+ λ x(j)k)
θ (j)k:= θ (j)k− α (∑i:r(i,j)=1(( θ (j))Tx(i)−y(i,j))x(i)k+ λ θ (j)k)
可以通过反复使用两个迭代更新公式,先求最小化的 x,再求最小化的 θ ,再求最小化的 x …的方法达到一个很不错的值。
首先是随机初始化,给 x(1),…,x(nm), θ 1,…, θ nu 赋一些随机小值,其次是最小化代价函数,得到最优的 x 和 θ(一般使用梯度下降法),最后根据得到的参数,预测用户j给电影i的评分( ( θ (j))Tx(i) )。
3、均值归一化
如果存在新用户,没有为任何电影评分,如何为其推荐电影呢?这里的解决办法是对要对每个电影的得分平均化,使每个电影的得分被归一化到0,最后每个电影的得分为用实际得分减去平均得分。
对于新用户,我们会认为他给每个电影的评分都是平均分,即0分。使用新得到的Y矩阵来训练算法,最后预测的评分应该为 ( θ (j))Tx(i)+ μ i