机器学习——推荐系统
机器学习——推荐系统
在各类音乐软件或各大购物网站里,通常会存在推荐系统。它可以根据每个用户的个人喜好为用户推荐相应的歌曲(商品),从而增加用户体验,并提高了产品的销量。因此,推荐系统是一个很值得学习的应用领域。
一个例子
如下图所示,这是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)}||}}
\]
欢迎阅读我的文章,如发现问题,请务必留言指正。
本博客内容除注明转载的内容外,均为作者原创,转载请注明原地址!
博客地址:http://www.cnblogs.com/connorzx/
希望在未来的日子里我和你共同进步。