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

1、概述

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

2、基于内容的推荐算法

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

2.1 电影推荐案例

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

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

2.2 符号说明

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

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

2.3 基本原理

我们假设用户j对电影i的评分为: ( θ ( j ) ) T ∗ X ( i ) (\theta^{(j)})^T*X^{(i)} (θ(j))TX(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 minθj2m(j)1i:r(i,j)=1((θj)TX(i)y(i,j))2+2m(j)λk=1n(θk(j))2

m ( j ) 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 minθj21i:r(i,j)=1((θj)TX(i)y(i,j))2+2λk=1n(θ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 J(θ(1),θ(2),θ(3)......θ(nu))=21j=1nui:r(i,j)=1((θj)TX(i)y(i,j))2+2λj=1nuk=1n(θ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))TX(i)y(i,j))xk(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) θk(j):=θk(j)α(i:r(i,j)=1((θ(j))TX(i)y(i,j))xk(i)+λθk(j))(for k!=0)

3、协同过滤

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

3.1 前提

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

3.2 原理

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

m i n x ( i ) min_x^{(i)} minx(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 21j:r(i,j)=1((θ(j))TX(i)y(i,j))2+2λk=1n(xk(i))2

求解所有的X:
m i n x ( 1 ) , x ( 2 ) . . . x ( n m ) min_{x^{(1)},x^{(2)}...x^{(n_m)}} minx(1),x(2)...x(nm) 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 21i=1nmj:r(i,j)=1((θ(j))TX(i)y(i,j))2+2λi=1nmk=1n(xk(i))2

3.3 计算步骤

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

3.4 同时计算 θ 、 X \theta、 X θX

有一种同时计算 θ X \theta X θ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 J(x(1),x(2),x(3)...,x(nm),θ(1),θ(2),θ(3)......θ(nu))=21(i,j):r(i,j)=1((θj)TX(i)y(i,j))2+2λj=1nuk=1n(θk(j))2+2λi=1nmk=1n(xk(i))2

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

计算步骤为:

  1. 随机初始化 θ   x \theta \ x θ x为较小的值。
  2. 使用梯度下降算法优化 θ   x \theta \ x θ 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)} ) θk(j):=θk(j)α(i:r(i,j)=1((θ(j))TX(i)y(i,j))xk(i)+λθ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)}}) xk(i):=xk(i)α(i:r(i,j)=1((θ(j))TX(i)y(i,j))θk(j)+λX(i))

4、矢量化实现

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

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

5、均值归一化

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

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

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

介绍一下上图的元素:

  1. Y:代表用户对电影的评分,可以看出最后一个用户,没有进行任何评分。
  2. μ \mu μ代表每个电影评分的平均值。
  3. 使用Y减去平均值得到新的Y。
  4. 预测评分的公式为: ( θ ( j ) ) T x ( i ) (\theta^{(j)})^T{x^{(i)}} (θ(j))Tx(i),由于每个y值都减去了平均值,所以公式需要加上平均值: ( θ ( j ) ) T x ( i ) + μ i (\theta^{(j)})^T{x^{(i)}} +\mu_i (θ(j))Tx(i)+μi
  5. 所以没有评分的用户的评分: ( θ ( j ) ) T x ( i ) + μ i = 0 + μ i = μ i (\theta^{(j)})^T{x^{(i)}} +\mu_i=0+\mu_i=\mu_i (θ(j))Tx(i)+μi=0+μi=μi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值