使用场景
消费者C={user1,user2,user3,…,usernu}C=\{user_1,user_2,user_3,\dots,user_{n_u}\}C={user1,user2,user3,…,usernu},一共有nun_unu个样本
商品G={prod1,prod2,…,prodnp}G=\{prod_1,prod_2,\dots,prod_{n_p}\}G={prod1,prod2,…,prodnp},一共有npn_pnp个样本
消费者对商品的评分如下表:
user1user_1user1 | user2user_2user2 | user3user_3user3 | …\dots… | usernuuser_{n_u}usernu | |
---|---|---|---|---|---|
prod1prod_1prod1 | r1,1r_{1,1}r1,1 | r1,2r_{1,2}r1,2 | r1,3r_{1,3}r1,3 | …\dots… | r1,nur_{1,n_u}r1,nu |
prod2prod_2prod2 | r2,1r_{2,1}r2,1 | r2,2r_{2,2}r2,2 | r2,3r_{2,3}r2,3 | …\dots… | r2,nur_{2,n_u}r2,nu |
…\dots… | |||||
prodnpprod_{n_p}prodnp | rnp,1r_{n_p,1}rnp,1 | rnp,2r_{n_p,2}rnp,2 | rnp,3r_{n_p,3}rnp,3 | …\dots… | rnp,nur_{n_p,n_u}rnp,nu |
描述商品i在某特征的符合程度xi=[f1,f2,…,fm]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对其评分ri,jr_{i,j}ri,j由xi,θjx_i,\theta_jxi,θj来决定,即
ri,j=θjTxi
r_{i,j}=\theta_j^Tx_i
ri,j=θjTxi
协同过滤算法
协同过滤算法的思想是对某种特征的喜好相同(比如都喜欢动作电影)的消费者,对在某种特征上比较契合的商品上评价也应趋于一致(对于新出的动作电影评分都可能较高)
-
设置mmm个特征,f1,f2,…,fmf_1,f_2,\dots,f_mf1,f2,…,fm,比如电影的浪漫程度,暴力程度,喜剧程度等等,这些特征不用手工提取,只需要确定m的大小,特征的具体值将会由算法学习得出。
-
对于nun_unu个消费者,npn_pnp个商品,我们先初始化两个数据集:
X={x1,x2,…,xnp}X=\{x_1,x_2,\dots,x_{n_p}\}X={x1,x2,…,xnp}
Θ={θ1,θ2,…,θnu}\Theta=\{\theta_1,\theta_2,\dots,\theta_{n_u}\}Θ={θ1,θ2,…,θnu}
随机赋一些较小的值。
协同过滤算法的基本思路是:同时优化X,ΘX,\ThetaX,Θ,优化目标如下:
J(x1,…,xnp,θ1,…,θnu)=12∑(i,j):r(i,j)=1(θjTxi−yi,j)2+λ2∑i=1np∑k=1m(xik)2+∑j=1nu∑k=1m(θjk)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的偏差(如之前的x0=1,θ0=1x_0=1,\theta_0=1x0=1,θ0=1),这时x∈Rm,θ∈Rmx \in \mathbb{R}^m,\theta \in \mathbb{R}^mx∈Rm,θ∈Rm
- 使用梯度下降等方法进行优化,对i=1,2,…,np;j=1,2,…,nu;k=1,2,…,mi=1,2,\dots,n_p;j=1,2,\dots,n_u;k=1,2,\dots,mi=1,2,…,np;j=1,2,…,nu;k=1,2,…,m:
xik=xik−α(∑j:r(i,j)=1(θjTxi−yi,j)2+λik)θjk=θjk−α(∑i:r(i,j)=1(θjTxi−yi,j)2+λik) 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∑(θjTxi−yi,j)2+λik)θjk=θjk−α(i:r(i,j)=1∑(θjTxi−yi,j)2+λik)