推荐系统 recommender system

使用场景

消费者 C = { u s e r 1 , u s e r 2 , u s e r 3 , … , u s e r n u } C=\{user_1,user_2,user_3,\dots,user_{n_u}\} C={user1,user2,user3,,usernu},一共有 n u n_u nu个样本

商品 G = { p r o d 1 , p r o d 2 , … , p r o d n p } G=\{prod_1,prod_2,\dots,prod_{n_p}\} G={prod1,prod2,,prodnp},一共有 n p n_p np个样本

消费者对商品的评分如下表:

u s e r 1 user_1 user1 u s e r 2 user_2 user2 u s e r 3 user_3 user3 … \dots u s e r n u user_{n_u} usernu
p r o d 1 prod_1 prod1 r 1 , 1 r_{1,1} r1,1 r 1 , 2 r_{1,2} r1,2 r 1 , 3 r_{1,3} r1,3 … \dots r 1 , n u r_{1,n_u} r1,nu
p r o d 2 prod_2 prod2 r 2 , 1 r_{2,1} r2,1 r 2 , 2 r_{2,2} r2,2 r 2 , 3 r_{2,3} r2,3 … \dots r 2 , n u r_{2,n_u} r2,nu
… \dots
p r o d n p prod_{n_p} prodnp r n p , 1 r_{n_p,1} rnp,1 r n p , 2 r_{n_p,2} rnp,2 r n p , 3 r_{n_p,3} rnp,3 … \dots r n p , n u r_{n_p,n_u} rnp,nu

描述商品i在某特征的符合程度 x i = [ f 1 , f 2 , … , f m ] T ( m × 1 ) x_i=[f_1,f_2,\dots,f_m]^T \quad(m \times 1) xi=[f1,f2,,fm]T(m×1)
消费者j对某个特征的喜好程度 θ j = [ θ 1 , θ 2 , … , θ m ] T ( m × 1 ) \theta_j=[\theta_1,\theta_2,\dots,\theta_m]^T \quad (m\times 1) θj=[θ1,θ2,,θm]T(m×1)

特征的维数m将会在后面说到。

对于某个商品i,消费者j对其评分 r i , j r_{i,j} ri,j x i , θ j x_i,\theta_j xi,θj来决定,即
r i , j = θ j T x i r_{i,j}=\theta_j^Tx_i ri,j=θjTxi

协同过滤算法

协同过滤算法的思想是对某种特征的喜好相同(比如都喜欢动作电影)的消费者,对在某种特征上比较契合的商品上评价也应趋于一致(对于新出的动作电影评分都可能较高)

  • 设置 m m m个特征, f 1 , f 2 , … , f m f_1,f_2,\dots,f_m f1,f2,,fm,比如电影的浪漫程度,暴力程度,喜剧程度等等,这些特征不用手工提取,只需要确定m的大小,特征的具体值将会由算法学习得出。

  • 对于 n u n_u nu个消费者, n p n_p np个商品,我们先初始化两个数据集:

    X = { x 1 , x 2 , … , x n p } X=\{x_1,x_2,\dots,x_{n_p}\} X={x1,x2,,xnp}

    Θ = { θ 1 , θ 2 , … , θ n u } \Theta=\{\theta_1,\theta_2,\dots,\theta_{n_u}\} Θ={θ1,θ2,,θnu}

    随机赋一些较小的值。

协同过滤算法的基本思路是:同时优化 X , Θ X,\Theta X,Θ,优化目标如下:

J ( x 1 , … , x n p , θ 1 , … , θ n u ) = 1 2 ∑ ( i , j ) : r ( i , j ) = 1 ( θ j T x i − y i , j ) 2 + λ 2 ∑ i = 1 n p ∑ k = 1 m ( x i k ) 2 + ∑ j = 1 n u ∑ k = 1 m ( θ j k ) 2 J(x_1,\dots,x_{n_p},\theta_1,\dots,\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_{i=1}^{n_p}\sum_{k=1}^{m}(x_i^{k})^2 +\sum_{j=1}^{n_u}\sum_{k=1}^m(\theta_j^k)^2 J(x1,,xnp,θ1,,θnu)=21(i,j):r(i,j)=1(θjTxiyi,j)2+2λi=1npk=1m(xik)2+j=1nuk=1m(θjk)2
注意,这时候就不需要加上恒为1的偏差(如之前的 x 0 = 1 , θ 0 = 1 x_0=1,\theta_0=1 x0=1,θ0=1),这时 x ∈ R m , θ ∈ R m x \in \mathbb{R}^m,\theta \in \mathbb{R}^m xRm,θRm

  • 使用梯度下降等方法进行优化,对 i = 1 , 2 , … , n p ; j = 1 , 2 , … , n u ; k = 1 , 2 , … , m i=1,2,\dots,n_p;j=1,2,\dots,n_u;k=1,2,\dots,m i=1,2,,np;j=1,2,,nu;k=1,2,,m
    x i k = x i k − α ( ∑ j : r ( i , j ) = 1 ( θ j T x i − y i , j ) 2 + λ i k ) θ j k = θ j k − α ( ∑ i : r ( i , j ) = 1 ( θ j T x i − y i , j ) 2 + λ i k ) x_i^k=x_i^k-\alpha(\sum_{j:r(i,j)=1}(\theta_j^Tx_i-y_{i,j})^2 +\lambda_i^k)\\ \theta_j^k=\theta_j^k-\alpha(\sum_{i:r(i,j)=1}(\theta_j^Tx_i-y_{i,j})^2 +\lambda_i^k) xik=xikα(j:r(i,j)=1(θjTxiyi,j)2+λik)θjk=θjkα(i:r(i,j)=1(θjTxiyi,j)2+λik)

你可能感兴趣的:(机器学习)