推薦系統(Recommender System)
阿新 • • 發佈:2019-03-16
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\)
- \(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\)
步驟
- 對每一部電影的評分進行去中心化, 得到去中心化的數據以及均值, 在去中心化的過程中忽略評分為?的數據
- 隨機初始化\(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)