All problems
Matrix Factorization SGD Update
Problem
Perform one SGD update for matrix factorization.
Given user vector p, item vector q, and observed rating r, compute pred = dot(p, q) and err = r - pred. Return [new_p, new_q] with new_p_i = p_i + lr * (err * q_i - reg * p_i) and new_q_i = q_i + lr * (err * p_i - reg * q_i). Defaults are lr=0.01 and reg=0.02.
Hint
The regularization term pulls each latent vector toward zero every update.
Test cases
case 1
in: [[0.5,0.5],[0.5,0.5],1,0.1,0]
expected: [[0.525,0.525],[0.525,0.525]]
case 2
in: [[1],[2],5,0.1,0]
expected: [[1.6],[2.3]]
case 3
in: [[1],[1],2,0.1,0.1]
expected: [[1.09],[1.09]]
case 4
in: [[0,0],[1,1],3,0.1,0]
expected: [[0.30000000000000004,0.30000000000000004],[1,1]]
Starter codePython
def mf_update(p, q, rating, lr=0.01, reg=0.02):
# Return [new_p, new_q]
# Your code here
pass4 test cases · run your code against them in the editor