消费者 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∑(θjTxi−yi,j)2+2λi=1∑npk=1∑m(xik)2+j=1∑nuk=1∑m(θ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 x∈Rm,θ∈Rm