推薦系統 recommender system

使用場景

消費者C={user1,user2,user3,,usernu}C=\{user_1,user_2,user_3,\dots,user_{n_u}\},一共有nun_u個樣本

商品G={prod1,prod2,,prodnp}G=\{prod_1,prod_2,\dots,prod_{n_p}\},一共有npn_p個樣本

消費者對商品的評分如下表:

user1user_1 user2user_2 user3user_3 \dots usernuuser_{n_u}
prod1prod_1 r1,1r_{1,1} r1,2r_{1,2} r1,3r_{1,3} \dots r1,nur_{1,n_u}
prod2prod_2 r2,1r_{2,1} r2,2r_{2,2} r2,3r_{2,3} \dots r2,nur_{2,n_u}
\dots
prodnpprod_{n_p} rnp,1r_{n_p,1} rnp,2r_{n_p,2} rnp,3r_{n_p,3} \dots rnp,nur_{n_p,n_u}

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

特徵的維數m將會在後面說到。

對於某個商品i,消費者j對其評分ri,jr_{i,j}xi,θjx_i,\theta_j來決定,即
ri,j=θjTxi r_{i,j}=\theta_j^Tx_i

協同過濾算法

協同過濾算法的思想是對某種特徵的喜好相同(比如都喜歡動作電影)的消費者,對在某種特徵上比較契合的商品上評價也應趨於一致(對於新出的動作電影評分都可能較高)

  • 設置mm個特徵,f1,f2,,fmf_1,f_2,\dots,f_m,比如電影的浪漫程度,暴力程度,喜劇程度等等,這些特徵不用手工提取,只需要確定m的大小,特徵的具體值將會由算法學習得出。

  • 對於nun_u個消費者,npn_p個商品,我們先初始化兩個數據集:

    X={x1,x2,,xnp}X=\{x_1,x_2,\dots,x_{n_p}\}

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

    隨機賦一些較小的值。

協同過濾算法的基本思路是:同時優化X,ΘX,\Theta,優化目標如下:

J(x1,,xnp,θ1,,θnu)=12(i,j):r(i,j)=1(θjTxiyi,j)2+λ2i=1npk=1m(xik)2+j=1nuk=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
注意,這時候就不需要加上恆爲1的偏差(如之前的x0=1,θ0=1x_0=1,\theta_0=1),這時xRm,θRmx \in \mathbb{R}^m,\theta \in \mathbb{R}^m

  • 使用梯度下降等方法進行優化,對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,m
    xik=xikα(j:r(i,j)=1(θjTxiyi,j)2+λik)θjk=θjkα(i:r(i,j)=1(θjTxiyi,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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章