机器学习——推荐系统

机器学习——推荐系统

在各类音乐软件或各大购物网站里,通常会存在推荐系统。它可以根据每个用户的个人喜好为用户推荐相应的歌曲(商品),从而增加用户体验,并提高了产品的销量。因此,推荐系统是一个很值得学习的应用领域。

一个例子

如下图所示,这是4个用户对5部电影的评价,我们要求评价只能是0-5之间的数。可以看出,有一些已经打分了,有一些还没有。为了增加收入,电影供应商决定为这些观众推荐电影。于是,他们要预测观众对未看过电影的打分,并将得分高的电影推荐给观众。

为了解决这个问题,我们需要引入一些符号
(n_u) 表示用户(Users)的数量
(n_m) 表示电影(Movies)的数量
(r(i,j)) 表示用户i对电影j是否评价过。如果评价过,那么(r(i,j)=1)
(y^{(i,j)}) 表示用户i对电影j的评分

建立模型

假设我们使用线性回归模型,那么对于每一个用户(j),我们定义一个用户参量( heta^{(j)})。对于每一个电影(i),我们定义一个特征向量(x^{(i)})
于是,用户(j)对于电影(i)的评价为(( heta^{(j)})^Tx^{(i)})

下面我们将分类讨论

  • 如果我们有电影参数,那么优化问题变成

[min limits_{ heta^{(1)},ldots, heta^{(n_u)}} {1 over 2} sum limits_{j=1}^{n_u}sum limits_{i:r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+{lambda over 2} sum limits_{j=1}^{n_u}sum limits_{k=1}^{n}( heta_k^{(j)})^2 ]

  • 如果我们有用户参数,那么优化问题变成

[min limits_{x^{(1)},ldots,x^{(n_m)}} {1 over 2} sum limits_{i=1}^{n_m}sum limits_{j:r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+{lambda over 2} sum limits_{i=1}^{n_m}sum limits_{k=1}^{n}(x_k^{(i)})^2 ]

  • 如果我们既没有完整的用户参数,也没有完整的电影参数,那么我们得协同学习两者

[min limits_{ heta^{(1)},ldots, heta^{(n_u)};x^{(1)},ldots,x^{(n_m)}} {1 over 2} sum limits_{(i,j):r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+{lambda over 2} sum limits_{i=1}^{n_m}sum limits_{k=1}^{n}(x_k^{(i)})^2+{lambda over 2} sum limits_{j=1}^{n_u}sum limits_{k=1}^{n}( heta_k^{(j)})^2 ]

具体的算法会使用梯度下降法,

[x_k^{(i)}:=x_k^{(i)}-alpha(sum limits_{j:r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)}) heta_k^{(j)}+lambda x_k^{(i)}) ]

[ heta_k^{(j)}:= heta_k^{(j)}-alpha(sum limits_{i:r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)})x_k^{(i)}+lambda heta_k^{(j)}) ]

算法步骤

  • 随机初始化( heta^{(1)},ldots, heta^{(n_u)};x^{(1)},ldots,x^{(n_m)})为一些很小的值;

  • 使用梯度下降法最小化代价函数

[J( heta^{(1)},ldots, heta^{(n_u)};x^{(1)},ldots,x^{(n_m)})={1 over 2} sum limits_{(i,j):r(i,j)=1} (( heta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+{lambda over 2} sum limits_{i=1}^{n_m}sum limits_{k=1}^{n}(x_k^{(i)})^2+{lambda over 2} sum limits_{j=1}^{n_u}sum limits_{k=1}^{n}( heta_k^{(j)})^2 ]

  • 训练结束后,预测用户(j)为电影(i)的评分为(( heta^{(j)})^Tx^{(i)})

  • 通过最后评分的高低,为用户推荐相应的电影

另外,不同电影的相关程度我们可以用两个向量的夹角来表示

[ ho ={leftlangle {x^{(i)},x^{(j)}} ight angle over {||x^{(i)}||||x^{(j)}||}} ]

原文地址:https://www.cnblogs.com/connorzx/p/4739620.html