机器学习——推荐系统

机器学习——推荐系统

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

一个例子

如下图所示,这是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\),我们定义一个用户参量\(\theta^{(j)}\)。对于每一个电影\(i\),我们定义一个特征向量\(x^{(i)}\)
于是,用户\(j\)对于电影\(i\)的评价为\((\theta^{(j)})^Tx^{(i)}\)

下面我们将分类讨论

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

\[\min \limits_{\theta^{(1)},\ldots,\theta^{(n_u)}} {1 \over 2} \sum \limits_{j=1}^{n_u}\sum \limits_{i:r(i,j)=1} ((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})^2+{\lambda \over 2} \sum \limits_{j=1}^{n_u}\sum \limits_{k=1}^{n}(\theta_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} ((\theta^{(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_{\theta^{(1)},\ldots,\theta^{(n_u)};x^{(1)},\ldots,x^{(n_m)}} {1 \over 2} \sum \limits_{(i,j):r(i,j)=1} ((\theta^{(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}(\theta_k^{(j)})^2 \]

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

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

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

算法步骤

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

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

\[J(\theta^{(1)},\ldots,\theta^{(n_u)};x^{(1)},\ldots,x^{(n_m)})={1 \over 2} \sum \limits_{(i,j):r(i,j)=1} ((\theta^{(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}(\theta_k^{(j)})^2 \]

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

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

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

\[\rho ={\left\langle {x^{(i)},x^{(j)}} \right\rangle \over {||x^{(i)}||||x^{(j)}||}} \]

posted @ 2015-08-18 15:50  connorzx  阅读(1051)  评论(0编辑  收藏  举报