machine learning 之 Recommender Systems

整理自Andrew Ng的machine learning 课程 week 9.算法

 

目录:网络

  • Problem Formulation(问题的形式)
  • Content Based Recommendations(基于内容的推荐)
  • Collaborative Filtering(协同过滤)
  • Collaborative Filtering Algorithm(协同过滤算法)
  • Vectorization: Low Rank Matrix Factorization(向量化:矩阵低秩分解)
  • Implementation Detail: Mean Normalization(具体实施:均值正则化)

 

一、Problem Formulation

推荐系统在机器学习领域是一个很流行的应用。机器学习

好比说,咱们尝试向用户推荐电影。咱们可使用如下定义:函数

  • $n_u$:the number of users,用户数
  • $n_m$:the number of movies,电影数
  • $r(i,j)=1$ if user j has rated movie i,用户j是否对电影i进行了评分
  • $y(i,j)$:rating given by user j to movie i(只有在r(i,j)=1时才有值),用户j对电影i的评分

 

二、Content Based Recommendations

咱们能够定义两个特征$x_1$和$x_2$,分别表明电影的浪漫程度和动做程度(值在0-1之间);学习

一个预测电影评分的作法能够是,对每个用户作linear regression,获得每一个用户的$\theta^{(j)} \in R^3$(这里自动加入了$x_0=1$),这样对用户j对电影i的评分的预测值就是$(\theta^{(j)})^Tx^{(i)}$;优化

  • $\theta^{(j)}$:用户j的参数向量
  • $x^{(i)}$:电影i的特征向量

对于用户j,电影i,预测的评分即为$(\theta^{(j)})^Tx^{(i)}$spa

  • $m^{(j)}$:用户j打分的电影数目

为了学习参数向量$\theta^{(j)}$(用户j的参数向量),咱们做以下操做:orm

$min_{\theta^{(j)}} \quad \frac{1}{2} \sum_{i:r(i,j)=1}{(\theta^{(j)}x^{(i)}-y^{(i,j)})}^2+\frac{\lambda}{2}\sum_{k=1}^{n}{(\theta_k^{(j)})}^2$blog

这实际上是和线性回归的相似的损失函数同步

为了学习全部用户的参数向量:

$min_{\theta^{(1)},...,\theta^{(n_u)}} \quad \frac{1}{2} \sum_{j=1}^{n_u} \sum_{i:r(i,j)=1}{(\theta^{(j)}x^{(i)}-y^{(i,j)})}^2+\frac{\lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^{n}{(\theta_k^{(j)})}^2$

以上的损失函数和线性回归中的损失函数同样,因此咱们也能够用线性回归的梯度降低法去更新参数:

$\theta_k^{(j)} = \theta_k^{(j)} - \alpha \sum_{i:r(i,j)=1}  ((\theta^(j))^Tx^{(i)} - y^{(i,j)}) x_k^{(i)} \quad k=0$

$\theta_k^{(j)} = \theta_k^{(j)} - \alpha (\sum_{i:r(i,j)=1} ((\theta^(j))^Tx^{(i)} - y^{(i,j)}) x_k^{(i)} + \lambda \theta_k^{(j)}) \quad k \neq 0$

这里惟一与线性回归中的不一样就是省略掉的常数m是不同的。

 

三、Collaborative Filtering

实际中很难去定义和计算一部电影的浪漫度和动做度,为了解决这个问题,可使用feature finder;

能够在以前询问用户对不一样种类的电影的喜好程度,直接提供$\theta$参数;

而后就能够经过参数推算特征了:

$min_{x^{(1)},...,x^{(n_m)}}  \quad \frac{1}{2} \sum_{i=1}^{n_m} \sum_{j:r(i,j)=1}{(\theta^{(j)}x^{(i)}-y^{(i,j)})}^2+\frac{\lambda}{2} \sum_{i=1}^{n_m} \sum_{k=1}^{n}{(x_k^{(i)})}^2$

 

你也能够随机的猜想一些$\theta$的值,而后用这些$\theta$的值去计算特征的值,这样重复的计算,最后也能够收敛到比较好的特征的值

 依据上述:

  • 知道了参数$\theta$,咱们能够估计特征x;
  • 知道了特征x,咱们能够估计参数$\theta$;

这就是协同过滤(Collaborative Filtering)。

 

四、Collaborative Filtering Algorithm

为了加快计算的速度,咱们其实能够在最小化时同步的计算参数和特征:

$J(x,\theta) = \frac{1}{2} \sum_{(i,j):r(i,j)=1} {((\theta^{(j)})^Tx^{(i)}-y^{(i,j)})}^2 + \frac{lambda}{2} \sum_{j=1}^{n_u} \sum_{k=1}^{n}{(\theta_k^{(j)})}^2 + \frac{lambda}{2} \sum_{i=1}^{n_m} \sum_{k=1}^n {(x^{(i)})}^2$

这个式子看起来比较复杂,其实只是结合了参数$\theta$和特征x的损失函数,因为算法能够学习,因此不须要设定一个$x_0=1$,所以$x \in R^n, \theta \in R^n$;

完整算法以下:

  1. 将$x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)}$初始化为一些随机的很小的值;(不能把它们初始化为0,由于和神经网络中同样,要break symmetry,不然计算出来的特征的值都是同样的)
  2. 使用梯度降低(或者其余的优化算法)最小化$J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})$,参数的更新以下:
    • $x_k^{(i)} = x_k^{(i)} - \alpha{(\sum_{j:r(i,j)=1} {({(\theta^{(j)})}^Tx^{(i)}- y^{(i,j)})\theta_k^{(j)}} + \lambdax_k^{(i)})}$
    • $\theta_k^{(j)} = \theta_k^{(j)} - \alpha{(\sum_{i:r(i,j)=1} {({(\theta^{(j)})}^Tx^{(i)}- y^{(i,j)})x_k^{(i)}} + \lambda\theta_k^{(j)})}$

   3. 对于一个参数为$\theta$的用户和特征为x的电影,那么预测的评分为$(\theta)^Tx$

 

五、Vectorization: Low Rank Matrix Factorization

为了实现向量化的计算,公式以下:$Y=X\Theta^T$

一个m*n的矩阵的秩r若是很低,那么这个矩阵能够分解为一个m*r和一个r*n的矩阵相乘(有点相似SVD分解),因此Y能够直接分解获得X和$\Theta$

如何定义电影i和电影j的相关度?

$||x_i-x_j||$,这个值越小,说明电影i和电影j的类似度越大。

 

六、Implementation Detail: Mean Normalization

考虑一个问题,若是一个用户没有给任何一部电影评分,那么经过以前的方法计算出来的此用户对任何一部电影的评分都会是0,这显然是不对的,那么如何解决这个问题呢?

实际上,咱们能够经过Mean Normalization去处理评分矩阵,获得一个新的评分矩阵$Y’=Y-\mu$,对这个新的矩阵利用协同过滤算法,计算出用户参数矩阵和特征矩阵,再进行预测评分,此时预测时须要在结果上再加上一个均值,由于咱们的评分矩阵是通过处理的,因此求预测时,也须要再把这个以前减去的均值再加回来。

相关文章
相关标签/搜索