1. 程式人生 > >推薦系統(Recommender System)

推薦系統(Recommender System)

alpha splay min 計算 ali 協同過濾算法 評分 其中 num

推薦系統(Recommender System)

案例

  • 為用戶推薦電影

數據展示

Bob Tom Alice Jack 動作成分 浪漫成分
Movie1 5 ? 0 3 ? ?
Movie2 ? 0 3 ? ? ?
Movie3 0 1 0 5 ? ?
Movie4 ? 4 1 0 ? ?

算法

  • 協同過濾算法(Collaborative filter learning algorithm)

記號

  • \(n_m\): 數據中電影的數量, 其中n表示number, m表示movie
  • \(n_u\): 數據中用戶的數量, 其中n表示number, u表示user
  • \(i\)
    : 表示第i部電影
  • \(j\): 表示第j位用戶
  • \(y^{(i, j)}\): 第j位用戶對第i部電影的評分, 我們發現在原始數據中有?, 表示用戶沒有看過, 不能評分, 這裏對應的\(y^{(i, j)}\)為0, \(y^{(i, j)}\)需要配合下一個\(r\)記號
  • \(r^{(i, j)}\): 第j位用戶是否看過第i部電影, 如果看過則為1, 沒有則為0, 其中r表示rate
  • \(x^{(i)}\): 第i部電影的特征向量
  • \(\theta^{(j)}\): 第j位用戶的權重
  • \(x_k^{(i)}\): 第i部電影的第k個特征向量
  • \((i,j):r(i,j)=1\), 表示取使得\(r(i,j)=1\)
    \((i,j)\)

步驟

  • 對每一部電影的評分進行去中心化, 得到去中心化的數據以及均值, 在去中心化的過程中忽略評分為?的數據
  • 隨機初始化\(X\)\(\Theta\)
  • 計算損失函數\[J(x^{(i)}, ..., x^{(n_m)},\theta^{(j)}, ..., \theta^{(n_u)})={1\over{2m}}\sum_{(i,j):r(i,j)=1}((\theta^{(i)})^Tx^{(i)}-y^{(i,j)})^2+{\lambda\over2}\sum_{i=1}^{n_m}\sum_{k=1}^n(x_k^{(i)})^2+{\lambda\over{2}}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta_k^{(j)})^2\]
  • 求解\[min_{x^{(i)}, ..., x^{(n_m)},\theta^{(j)}, ..., \theta^{(n_u)}}J(x^{(i)}, ..., x^{(n_m)},\theta^{(j)}, ..., \theta^{(n_u)})\]
  • 梯度
    • \[x_k^{(i)}:=x_k^{(i)}-\alpha(\sum_{j:r(i,j)=1}((\theta^{(j)})^T)-y^{(i,j)})\theta_k^{(i,j)}+\lambda x_k^{(i)})\]
    • \[\theta_k^{(j)}:=\theta_k^{(j)}-\alpha(\sum_{i:r(i,j)=1}((\theta^{(i)})^T-y^{(i,j)})x_k^{i}+\lambda \theta_k^{(j)})\]

Matlab實現CostFunction關鍵部分

%此處, 雖然有一些用戶沒有對一些電影做出評價, 但是Y仍然為0, 在下一個J的賦值語句中, 通過R計算出符合要求的J
J = (X * Theta' - Y) .^ 2;

J = (1 / 2) * sum(sum(J .* R)) + (lambda / 2) * sum(sum(X .^ 2)) + (lambda / 2) * sum(sum(Theta .^ 2));

X_grad = ((X * Theta' - Y) .* R) * Theta + lambda * X;
Theta_grad = ((X * Theta' - Y) .* R)' * X + lambda * Theta;

推薦系統(Recommender System)