吴恩达机器学习——第17章 推荐系统

1、概述

推荐系统是现实生活中应用最广泛的积极学习问题,通过对历史数据的分析,把用户感兴趣的商品、服务推荐给用户。

2、基于内容的推荐算法

基于内容的推荐算法,其实就是已知商品的特征,根据特征建立模型,实现推荐系统的方式。
我们以一个案例来介绍推荐算法,这个案例讲贯穿整章内容。

2.1 电影推荐案例

在这里插入图片描述
介绍一下上述表格的组成部分:

  • 第一列:代表电影的名称,一共有5个电影。
  • 第二列:分成4个小列,代表每个人对各个电影的评分。问号代表用户没有进行评分。
  • 第三列:电影的特征值, x 1 x_1 代表电影是爱情电影的概率; x 2 x_2 代表是动作电影的概率。

2.2 符号说明

为了描述方便,我们把本章使用到的符号做个定义:

  • n n n_n :用户数量。
  • n m n_m :电影数量。
  • r(i,j)=1:代表用户j对电影i进行了评价。
  • y(i,j):代表用户j对电影i的评分。
  • m ( j ) m^{(j)} :代表用户j评价的电影数量。
  • θ ( j ) \theta^{(j)} :用户j的向量参数。
  • x ( i ) x^{(i)} :电影i的特征向量。
  • n u n_u :代表 θ \theta 的数量。
  • n m n_m :代表特征x的数量。

2.3 基本原理

我们假设用户j对电影i的评分为: ( θ ( j ) ) T X ( i ) (\theta^{(j)})^T*X^{(i)} 。具体原因,恕我无可奉告。

在已知 θ \theta 和X的前提下,就能计算每个用户对每个电影的评分了。
这就是基于内容的推荐算法。

θ \theta 如何计算呢,请看下节。

2.4 θ \theta 的计算

θ \theta 是拟合参数,需要保证预测值与真实值最接近的情况下,求最小值,公式为:

m i n θ j 1 2 m ( j ) i : r ( i , j ) = 1 ( ( θ j ) T X ( i ) y ( i , j ) ) 2 + λ 2 m ( j ) k = 1 n ( θ k ( j ) ) 2 min_{\theta_j} :\frac{1}{2m^{(j)}}\sum_{i:r(i,j)=1}((\theta^j)^TX^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2m^{(j)}}\sum_{k=1}^n(\theta_k^{(j)})^2

m ( j ) m^{(j)} 代表用户评价的电影的数量,是一个常量,可以从商户公式中去掉:
m i n θ j 1 2 i : r ( i , j ) = 1 ( ( θ j ) T X ( i ) y ( i , j ) ) 2 + λ 2 k = 1 n ( θ k ( j ) ) 2 min_{\theta_j} :\frac{1}{2}\sum_{i:r(i,j)=1}((\theta^j)^TX^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{k=1}^n(\theta_k^{(j)})^2

求所有的 θ \theta 值:
J ( θ ( 1 ) , θ ( 2 ) , θ ( 3 ) . . . . . . θ ( n u ) ) = 1 2 j = 1 n u i : r ( i , j ) = 1 ( ( θ j ) T X ( i ) y ( i , j ) ) 2 + λ 2 j = 1 n u k = 1 n ( θ k ( j ) ) 2 J(\theta^{(1)},\theta^{(2)},\theta^{(3)}......\theta^{(n_u)})=\frac{1}{2}\sum_{j=1}^{n_u}\sum_{i: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

通过梯度下降的方式来计算 θ \theta
θ k ( j ) : = θ k ( j ) α ( i : r ( i , j ) = 1 ( ( θ ( j ) ) T X ( i ) y ( i , j ) ) x k ( i ) ) ( f o r   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)}) (for \ k=0)
θ k ( j ) : = θ k ( j ) α ( i : r ( i , j ) = 1 ( ( θ ( j ) ) T X ( i ) y ( i , j ) ) x k ( i ) + λ θ k ( j ) ) ( f o r   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)} )(for \ k!=0)

3、协同过滤

上面介绍的是已知特征的情况下,可以推导出 θ \theta ,从而构建推荐模型。
本节讲的是另外一种情况,假设 θ \theta 是已知的,特征是未知的,通过 θ \theta 来自动构建特征的过程,这种方式称为协同过滤。

3.1 前提

前提:每个用户都对数个电影进行了评分,通过观察大量的数据,得到每个电影的特征值,相当于每个用户都在协助改进算法。

3.2 原理

根据之前的定义我们知道用户j对电影i的评分为 ( θ ( j ) ) T X ( i ) (\theta^{(j)})^TX^{(i)} ,现在已知 θ \theta 、评分求解X,则公式为:

m i n x ( i ) min_x^{(i)} : 1 2 j : r ( i , j ) = 1 ( ( θ ( j ) ) T X ( i ) y ( i , j ) ) 2 + λ 2 k = 1 n ( x k ( i ) ) 2 \frac{1}{2}\sum_{j:r(i,j)=1}((\theta^{(j)})^TX^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{k=1}^n(x_k^{(i)})^2

求解所有的X:
m i n x ( 1 ) , x ( 2 ) . . . x ( n m ) min_{x^{(1)},x^{(2)}...x^{(n_m)}} 1 2 i = 1 n m j : r ( i , j ) = 1 ( ( θ ( j ) ) T X ( i ) y ( i , j ) ) 2 + λ 2 i = 1 n m k = 1 n ( x k ( i ) ) 2 \frac{1}{2}\sum_{i=1}^{n_m}\sum_{j:r(i,j)=1}((\theta^{(j)})^TX^{(i)}-y^{(i,j)})^2+\frac{\lambda}{2}\sum_{i=1}^{n_m}\sum_{k=1}^n(x_k^{(i)})^2

3.3 计算步骤

  1. 先取一个随机的 θ \theta
  2. 根据上述公式计算出X。
  3. θ \theta 进行优化。
  4. 重新计算x

3.4 同时计算 θ X \theta、 X

有一种同时计算 θ X \theta X 的方式,公式为:
J ( x ( 1 ) , x ( 2 ) , x ( 3 ) . . . , x ( n m ) , θ ( 1 ) , θ ( 2 ) , θ ( 3 ) . . . . . . θ ( n u ) ) = 1 2 ( i , j ) : r ( i , j ) = 1 ( ( θ j ) T X ( i ) y ( i , j ) ) 2 + λ 2 j = 1 n u k = 1 n ( θ k ( j ) ) 2 + λ 2 i = 1 n m k = 1 n ( x k ( i ) ) 2 J(x^{(1)},x^{(2)},x^{(3)}...,x^{(n_m)},\theta^{(1)},\theta^{(2)},\theta^{(3)}......\theta^{(n_u)})=\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_k^{(i)})^2

注意:该算法中,不包含 x 0 θ 0 x_0 \theta_0 的值。

计算步骤为:

  1. 随机初始化 θ   x \theta \ x 为较小的值。
  2. 使用梯度下降算法优化 θ   x \theta \ x

θ k ( j ) : = θ k ( j ) α ( i : r ( i , j ) = 1 ( ( θ ( j ) ) T X ( i ) y ( i , j ) ) x k ( i ) + λ θ k ( j ) ) \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)} )

x k ( i ) : = x k ( i ) α ( i : r ( i , j ) = 1 ( ( θ ( j ) ) T X ( i ) y ( i , j ) ) θ k ( j ) + λ X ( i ) ) x_k^{(i)}:=x_k^{(i)}-\alpha(\sum_{i:r(i,j)=1}((\theta^{(j)})^TX^{(i)}-y^{(i,j)})\theta_k^{(j)}+\lambda{X^{(i)}})

4、矢量化实现

矢量化是一种表示方式的变化。
在这里插入图片描述
我们来看一下上面的这张图:

  1. Y:每行代表每个用户对一个电影的评分结果。
  2. Predicted ratings:预测的公式, ( θ ( j ) ) 2 x ( i ) (\theta^{(j)})^2x^{(i)} 。用这个来预测Y的值。
  3. 假设X Θ \Theta 为两个矩阵,则 Y = X Θ T Y=X\Theta^T
    这就是矢量化表示方式,也称为“低秩矩阵分解算法”。

5、均值归一化

有些用户从来不对电影进行评分,针对于这种用户,如何进行推送呢?

通过上面的方式,因为r(i,j)!=1,所以该用户对所有电影的评分结果计算出来都是0,这对于推荐系统没有任何意义,而均值归一化是一种解决思路。

均值归一化:就是计算所有用户对电影的评分的平均值,作为该用户的评分返回。
在这里插入图片描述

介绍一下上图的元素:

  1. Y:代表用户对电影的评分,可以看出最后一个用户,没有进行任何评分。
  2. μ \mu 代表每个电影评分的平均值。
  3. 使用Y减去平均值得到新的Y。
  4. 预测评分的公式为: ( θ ( j ) ) T x ( i ) (\theta^{(j)})^T{x^{(i)}} ,由于每个y值都减去了平均值,所以公式需要加上平均值: ( θ ( j ) ) T x ( i ) + μ i (\theta^{(j)})^T{x^{(i)}} +\mu_i
  5. 所以没有评分的用户的评分: ( θ ( j ) ) T x ( i ) + μ i = 0 + μ i = μ i (\theta^{(j)})^T{x^{(i)}} +\mu_i=0+\mu_i=\mu_i
发布了48 篇原创文章 · 获赞 34 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/u013252773/article/details/102574510