推薦系統——電影評分
例子:預測電影評分
有如下資訊
Movie | Alice (1) | Bob (2) | Carol (3) | Dave (4) |
Love at last | 5 | 5 | 0 | 0 |
Romance forever | 5 | ? | ? | 0 |
Cute puppies of love | ? | 4 | 0 | ? |
Nonstop car chases | 0 | 0 | 5 | 4 |
Swords vs. karate |
0 | 0 | 5 | ? |
定義
nu = 使用者的數量
nm = 電影的數量
r(i, j) = 1 如果使用者 j 給電影 i 打分
y(i, j) = 當 r(i, j) = 1 的情況下,使用者 j 給電影 i 打的分數(0-5)
目標:預測 ?的值(未評分使用者對電影的評分)
現假設每個電影有兩個特徵
Movie | Alice (1) | Bob (2) | Carol (3) | Dave (4) | x1 (remoance) |
x2 (remoance) |
Love at last | 5 | 5 | 0 | 0 | 0.9 | 0 |
Romance forever | 5 | ? | ? | 0 | 1.0 | 0.01 |
Cute puppies of love | ? | 4 | 0 | ? | 0.99 | 0 |
Nonstop car chases | 0 | 0 | 5 | 4 | 0.1 | 1.0 |
Swords vs. karate | 0 | 0 |
5 | ? | 0 | 0.9 |
這樣就有了電影特徵的訓練集,比如對於電影 Love at least 的特徵向量為
\[{x^{\left( 1 \right)}} = \left[ {\begin{array}{*{20}{c}}
{{x_0}}\\
{{x_1}}\\
{{x_2}}
\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}
1\\
{0.9}\\
0
\end{array}} \right]\]
對於每個使用者 j ,學習其對應的單數 θ(j) ∈ R3,然後用 (θ(1))Tx(i) 預測使用者 j 對於電影 i 的評分。
用 m(j) = 代表使用者 j 評分的電影的數量,則定義學習目標
\[\underbrace {\min }_{{\theta ^{\left( j \right)}}}\frac{1}{{2{m^{\left( j \right)}}}}\sum\limits_{i:{r^{\left( {i,j} \right)}} = 1} {{{\left( {{{\left( {{\theta ^{\left( j \right)}}} \right)}^T}\left( {{x^{\left( i \right)}}} \right) - {y^{\left( {i,j} \right)}}} \right)}^2}} + \frac{\lambda }{{2{m^{\left( j \right)}}}}\sum\limits_{k = 1}^n {{{\left( {\theta _k^{\left( j \right)}} \right)}^2}} \]
在推薦系統中會將 m(j) 去掉,因為他是常數且不會影響計算得到的 θ(j)。
\[\underbrace {\min }_{{\theta ^{\left( j \right)}}}\frac{1}{2}\sum\limits_{i:{r^{\left( {i,j} \right)}} = 1} {{{\left( {{{\left( {{\theta ^{\left( j \right)}}} \right)}^T}\left( {{x^{\left( i \right)}}} \right) - {y^{\left( {i,j} \right)}}} \right)}^2}} + \frac{\lambda }{2}\sum\limits_{k = 1}^n {{{\left( {\theta _k^{\left( j \right)}} \right)}^2}} \]
定義所有使用者的學習目標
\[\underbrace {\min }_{{\theta ^{\left( 1 \right)}},...,{\theta ^{\left( {{n_u}} \right)}}}\frac{1}{2}\sum\limits_{j = 1}^{{n_u}} {\left[ {\sum\limits_{i:{r^{\left( {i,j} \right)}} = 1} {{{\left( {{{\left( {{\theta ^{\left( j \right)}}} \right)}^T}\left( {{x^{\left( i \right)}}} \right) - {y^{\left( {i,j} \right)}}} \right)}^2}} + \lambda \sum\limits_{k = 1}^n {{{\left( {\theta _k^{\left( j \right)}} \right)}^2}} } \right]} \]
然後運用梯度下降演算法得到最優的 θ
\[\begin{array}{l}
\theta _k^{\left( j \right)}: = \theta _k^{\left( j \right)} - \alpha \sum\limits_{i:{r^{\left( {i,j} \right)}} = 1} {\left( {{{\left( {{\theta ^{\left( j \right)}}} \right)}^T}\left( {{x^{\left( i \right)}}} \right) - {y^{\left( {i,j} \right)}}} \right)x_k^{\left( i \right)}} ---for-k=0\\
\theta _k^{\left( j \right)}: = \theta _k^{\left( j \right)} - \alpha \left( {\sum\limits_{i:{r^{\left( {i,j} \right)}} = 1} {\left( {{{\left( {{\theta ^{\left( j \right)}}} \right)}^T}\left( {{x^{\left( i \right)}}} \right) - {y^{\left( {i,j} \right)}}} \right)x_k^{\left( i \right)} + + \lambda \theta _k^{\left( j \right)}} } \right)---for-k≠0
\end{array}\]