吴恩达机器学习(十四)推荐系统(基于梯度下降的协同过滤算法)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhq9695/article/details/83025632

目录

0. 前言

1. 基于内容的推荐算法(Content-based recommendations)

2. 计算电影特征

3. 基于梯度下降的协同过滤算法(Collaborative filtering)

4. 低秩矩阵分解(Low rank matrix factorization)

5. 应用到推荐


学习完吴恩达老师机器学习课程的推荐系统,简单的做个笔记。文中部分描述属于个人消化后的理解,仅供参考。

如果这篇文章对你有一点小小的帮助,请给个关注喔~我会非常开心的~

0. 前言

在推荐系统中,主要有两种方法,基于内容的推荐算法协同过滤算法,此文章采用电影推荐作为例子,初始作如下定义:

  • n_{u} --- 用户数量
  • n_{m} --- 电影数量
  • r(i,j)=1 --- 用户 j 对电影 i 进行了评价
  • y(i,j) --- 用户 j 对电影 i 的评分
  • m^{(j)} --- 用户 j 评价了的电影数量
  • \theta^{(j)} --- 拟合用户 j 评价电影的曲线参数
  • n --- 电影的特征数量

推荐系统的目标,就是通过用户已经评价的电影和电影的特征,预测用户未评价的电影的评分,由此进行推荐。

1. 基于内容的推荐算法(Content-based recommendations)

给出如下例子(图源:吴恩达机器学习),基于内容的推荐算法已知每部电影的特征值

对于用户 j ,每一部的电影的特征为 x ,用户的评分为 y ,用数据集 \{x^{(1)},y^{(1)}\},...,\{x^{(n_{m})},y^{(n_{m})}\} ,进行拟合,得到参数 \theta^{(j)} ,对于需要预测的电影 x_{pred} ,由 \theta^{T}x_{pred} 得到评分,可根据预测的评分进行推荐。

单个用户的代价函数为:

\large J(\theta^{(j)})=\frac{1}{2m^{(j)}}\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2m^{(j)}}\sum_{k=1}^{n}(\theta_{k}^{(j)})^2

消去 m^{(j)} 后,多个用户的代价函数为:

\large J(\theta^{(1)},...,\theta^{(n_u)})=\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_{k}^{(j)})^2

梯度下降为:

\large \begin{align*} \theta_{k}^{(j)} &:= \theta_{k}^{(j)}-\alpha\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})x_{k}^{(i)}\ (if\ k=0) \\ \theta_{k}^{(j)} &:= \theta_{k}^{(j)}-\alpha(\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})x_{k}^{(i)}+\lambda\theta_{k}^{(j)})\ (if\ k\neq 0) \end{align*}

注:此时的 \theta 和 x 都增加了偏置 \theta_{0} 和 x_{0} 。

2. 计算电影特征

要求已知用户的参数 \theta^{(j)} ,根据每个用户对电影的评价 (\theta^{(j)})^{T}x ,拟合出电影 x 的特征值。

单部电影的代价函数表示为:

\large J(x^{(i)})=\frac{1}{2}\sum_{j:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{k=1}^{n}(x_{k}^{(i)})^2

多部电影的代价函数表示为:

\large J(x^{(1)},...,x^{(n_m)})=\frac{1}{2}\sum_{i=1}^{n_m}\sum_{j:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x_{k}^{(i)})^2

所以,结合基于内容的推荐算法,我们可首先假设 \theta ,然后拟合 x ,再优化 \theta\rightarrow x\rightarrow \theta\rightarrow ...

3. 基于梯度下降的协同过滤算法(Collaborative filtering)

基于内容的推荐算法通过 x 求解 \theta ,计算电影特征通过 \theta 求解 x ,如此往复计算复杂度大,可将两个代价函数合并:

\large \begin{align*} J(x^{(1)},...,x^{(n_m)},\theta^{(1)},...,\theta^{(n_u)})&=\frac{1}{2}\sum_{(i,j):r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})^2 \\ &+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^{n}(x_{k}^{(i)})^2+\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_{k}^{(j)})^2 \end{align*}

通过初始化 x 和 \theta 为较小的值,通过梯度下降降低代价函数:

\large \begin{align*} \theta_{k}^{(j)} &:= \theta_{k}^{(j)}-\alpha(\sum_{i:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})x_{k}^{(i)}+\lambda\theta_{k}^{(j)}) \\ x_{k}^{(i)} &:= x_{k}^{(i)}-\alpha(\sum_{j:r(i,j)=1}((\theta^{(j)})^{T}x^{(i)}-y^{(i,j)})\theta_{k}^{(j)}+\lambda x_{k}^{(i)}) \end{align*}

注:此时的 \theta 和 x 都不需要偏置 \theta_{0} 和 x_{0} 。

4. 低秩矩阵分解(Low rank matrix factorization)

如果对预测评分过程向量化,将评分表示为矩阵 Y ,每一行为电影,每一列为用户,则 Y=\begin{bmatrix} \theta^{(1)}x^{(1)} &... &\theta^{(n_u)}x^{(1)} \\ ... & &... \\ \theta^{(1)}x^{(n_m)} & ... & \theta^{(n_u)}x^{(n_m)} \end{bmatrix} ,X=\begin{bmatrix} (x^{(1)})^T\\ ...\\ (x^{(n_m)})^T \end{bmatrix} , \Theta =\begin{bmatrix} (\theta^{(1)})^T\\ ...\\ (\theta^{(n_u)})^T \end{bmatrix}, 则有 X \cdot \Theta^T=Y

5. 应用到推荐

根据电影 i 推荐相似的电影 j 给用户,可取使得 \left\|x^{(i)}-x^{(j)}\right\|^{2} 距离最小的 j

若一个用户对任何一部电影都未评分,则根据各个电影均值,进行推荐。


如果这篇文章对你有一点小小的帮助,请给个关注喔~我会非常开心的~

猜你喜欢

转载自blog.csdn.net/zhq9695/article/details/83025632
今日推荐