16 推荐系统

16 推荐系统

16.1 问题形式化

nu=no.users n u = n o . u s e r s ,用户数量
nm=no.movies n m = n o . m o v i e s ,电影数量

r(i,j)=1 if user j has rated movie i r ( i , j ) = 1   i f   u s e r   j   h a s   r a t e d   m o v i e   i
y(i,j)=rating given by user j to movie i (defined only if r(i,j)=1) y ( i , j ) = r a t i n g   g i v e n   b y   u s e r   j   t o   m o v i e   i   ( d e f i n e d   o n l y   i f   r ( i , j ) = 1 )

θ(j)= θ ( j ) = 用户 j j 的特征向量
x(i)=电影 i i 的特征向量

m(j)=用户 j j 评分的电影数量

16.2 开胃菜:基于内容的推荐系统

要推荐,先要知道用户喜欢什么,基于该用户已经评分的电影,去预测他对未评分电影可能的评分,如果评分高,就可以推荐给他。

基于内容的推系统必须预先知道要推荐的东西——电影的特征向量
除图片中的特征x1 x2 x 2 以外,设置特征 x0=1 x 0 = 1

x(1)=10.90 x ( 1 ) = [ 1 0.9 0 ]

特征数为n=2,则 θ(j)=Rn+1 θ ( j ) = R n + 1 ,即 R3 R 3
则预测用户 j j 对电影i的评分: (θ(j))Tx(i) ( θ ( j ) ) T x ( i )
对单个的用户 j j 而言,这个一个线性回归问题,问题的关键在于学习到参数θ(j)

模型:

(θ(j))Tx(i) ( θ ( j ) ) T x ( i )

最小化:
minθ(j)12m(j)i:r(i,j)=1[(θ(j))Tx(i)y(i,j)]2+λ2m(j)k=1n(θ(j)k)2 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

为了便于计算,去掉用户 j j 评分的电影数量:

minθ(j)12i:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2k=1n(θk(j))2

对于所有用户 :

minθ(1),...,θ(nu)12j=1nui:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2j=1nuk=1n(θ(j)k)2 m i n θ ( 1 ) , . . . , θ ( 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(θ(1),...,θ(nu))=12j=1nui:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2j=1nuk=1n(θ(j)k)2 J ( θ ( 1 ) , . . . , θ ( 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)k:=θ(j)kαi;r(i,j)=1((θ(j))Tx(i)y(i))x(i)k, (for k=0) θ k ( j ) := θ k ( j ) − α ∑ i ; r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i ) ) x k ( i ) ,   ( f o r   k = 0 )

θ(j)k:=θ(j)kα(i;r(i,j)=1((θ(j))Tx(i)y(i))x(i)k+λθ(j)k), (for k0) θ k ( j ) := θ k ( j ) − α ( ∑ i ; r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i ) ) x k ( i ) + λ θ k ( j ) ) ,   ( f o r   k ≠ 0 )

16.3 正餐:协同过滤collaborative filtering

基于内容的推荐系统必须预先对每一部电影都人为的给定一个特征向量,绝无可能把每部电影看完然后再做推荐系统。所以现实中面临的局面是:

没有电影的特征向量
也没有用户的特征向量
仅有用户对部分电影的评分
即: (θ(1))Tx(1)=5=y(1,1) ( θ ( 1 ) ) T x ( 1 ) = 5 = y ( 1 , 1 )

现在:
假设已知用户特征向量 θ(1),...θ(nu) θ ( 1 ) , . . . θ ( n u ) ,去学习 x(i) x ( i ) :

minx(i)12j:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2k=1n(x(i)k)2 m i n 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

推广到所有电影:
minx(i)12i=1nmj:r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2i=1nmk=1n(x(i)k)2 m i n x ( i ) 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

结合16.2,给出 θ θ ,就能得到 x x ,反过来,给出x,就能得到 θ θ 。但我们都没有,只有movie ratings电影评分。
那么,随机给定 θ θ ,然后:

θxθx... θ → x → θ → x . . .

这就是基本的协同过滤算法,根据每一个用户对一部分电影的评分,通过不断的优化 θ θ x x ,预测用户对电影的评分

16.4 再升级:实用算法

  • 改进:
    代价函数包含所有参数,同时优化θ x x :
    J(x(1),...,x(nm),θ(1),...,θ(nu))=12(i,j):r(i,j)=1((θ(j))Tx(i)y(i,j))2+λ2i=1nmk=1n(xk(i))2+λ2j=1nuk=1n(θk(j))2

    minx(1),...,x(nm),θ(1),...,θ(nu)J(x(1),...,x(nm),θ(1),...,θ(nu)) m i n x ( 1 ) , . . . , x ( n m ) , θ ( 1 ) , . . . , θ ( n u ) J ( x ( 1 ) , . . . , x ( n m ) , θ ( 1 ) , . . . , θ ( n u ) )
    • 优点:

      1. 同时优化,不需要再反复计算,即,不需要 θxθx... θ → x → θ → x . . .
      2. 不再添加 x0=1 x 0 = 1 xRn x ∈ R n θRn θ ∈ R n
    • 算法

      1. 初始化,用小的随机数初始化 x(1),...,x(nm),θ(1),...,θ(1) x ( 1 ) , . . . , x ( n m ) , θ ( 1 ) , . . . , θ ( 1 )
      2. 最小化代价函数,用梯度下降(或其他高级优化算法)
        for every j=1,...,nu,i=1,...,nm j = 1 , . . . , n u , i = 1 , . . . , n m :
        θ(j)k:=θ(j)kα(i:r(i,j)=1((θ(j))Tx(i)y(i))x(i)k+λθ(j)k) θ k ( j ) := θ k ( j ) − α ( ∑ i : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i ) ) x k ( i ) + λ θ k ( j ) )

        x(i)k:=x(i)kα(j:r(i,j)=1((θ(j))Tx(i)y(i))θ(j)k+λx(i)k) x k ( i ) := x k ( i ) − α ( ∑ j : r ( i , j ) = 1 ( ( θ ( j ) ) T x ( i ) − y ( i ) ) θ k ( j ) + λ x k ( i ) )
      3. 对于一个用户对某一部电影的评分,用户特征为 θ θ ,电影特征为 x x ,则预测该用户对该电影的评分为:
        θTx

      16.5 向量化:低秩矩阵分解

      将用户对电影的评分情况写成矩阵:

      以及预测值矩阵:

      那么可以将预测值矩阵做低秩矩阵分解

      (x(1))T(x(nm))T [ ( x ( 1 ) ) T ⋮ ( x ( n m ) ) T ]

      (θ(1))T(θ(nm))T [ ( θ ( 1 ) ) T ⋮ ( θ ( n m ) ) T ]

      则predicted ratings = XΘT X Θ T

    • 16.5(2) 相似性:推荐

      • 电影 j j 和电影i的相似性:
        x(i)x(j) ‖ x ( i ) − x ( j ) ‖

        如果小,则相似
      • 如果用户现在在看电影 i i ,可以找5部x(i)x(j) 最小的电影甩到推荐页面上。
      • (θ(j))Tx(i) ( θ ( j ) ) T x ( i ) 也是一种推荐手段

      16.6 细节:均值归一化

      • 如果一个人,刚注册,还没有给任何电影评分,我们怎么去推荐?

        利用16.4协同过滤算法,代价函数的第一部分为0(没有标签y),正则化部分将用户5的特征最小化为
        θ(5)=[00] θ ( 5 ) = [ 0 0 ]

        则由 (θ(5))Tx(i) ( θ ( 5 ) ) T x ( i ) ,预测用户5对所有的电影评分均为0。
        没有办法进行推荐。
        用均值归一化解决。
        解决的思路就是假定该用户是大众口味,大家喜欢的,他也喜欢。
      • 均值归一化

        其中, μ μ 为电影的均值,右侧是原始的评分矩阵减去均值。
        那么,在预测user j on movie i的评分时,应该是:
        (θ(j))Tx(i)+μ(i) ( θ ( j ) ) T x ( i ) + μ ( i )

        那么新用户的评分就是均值 μ μ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值