问题描述
我知道这是一个很简单的问题,但我没有明白。
import numpy
def matrix_factorization(R,P,Q,K,steps=5000,alpha=0.0002,beta=0.02):
'''
R: rating matrix
P: |U| * K (User features matrix)
Q: |D| * K (Item features matrix)
K: latent features
steps: iterations
alpha: learning rate
beta: regularization parameter'''
Q = Q.T
for step in range(steps):
for i in range(len(R)):
for j in range(len(R[i])):
if R[i][j] > 0:
# calculate error
eij = R[i][j] - numpy.dot(P[i,:],Q[:,j])
for k in range(K):
# calculate gradient with a and beta parameter
P[i][k] = P[i][k] + alpha * (2 * eij * Q[k][j] - beta * P[i][k])
Q[k][j] = Q[k][j] + alpha * (2 * eij * P[i][k] - beta * Q[k][j])
eR = numpy.dot(P,Q)
e = 0
for i in range(len(R)):
for j in range(len(R[i])):
if R[i][j] > 0:
e = e + pow(R[i][j] - numpy.dot(P[i,j]),2)
for k in range(K):
e = e + (beta/2) * (pow(P[i][k],2) + pow(Q[k][j],2))
# 0.001: local minimum
if e < 0.001:
break
return P,Q.T
R = [
[5,3,1],[4,[1,1,5],4],[0,5,]
R = numpy.array(R)
N = len(R)
M = len(R[0])
K = 2
P = numpy.random.rand(N,K)
Q = numpy.random.rand(M,K)
nP,nQ = matrix_factorization(R,K)
nR = numpy.dot(nP,nQ.T)
print(nR)
我知道矩阵分解模型背后的数学原理。我不明白的一点是测试部分。
让我用一个例子来解释。
我给 R 矩阵如下:
用户 - 电影矩阵:(输入)
R = [
[5,]
根据矩阵分解模型,我的输出如下
矩阵分解的输出:
array([[5.05061059,2.76932235,6.00910081,0.99918217],[3.9246345,2.15333139,4.77284691,0.9999652 ],[1.12424323,0.64611747,3.53300274,4.96832669],[0.94119495,0.53978842,2.87426388,3.9788853 ],[2.71213676,1.50889704,4.83895101,4.0215367 ]])
问题
好的,学习了接近原始矩阵的值。这个矩阵对我有什么作用??
矩阵分解将如何计算当前用户对新电影的评分?或新用户对现有电影的评价?
在协同过滤中,我们计算用户对之前没有看过的电影打分的概率,并根据它做出推荐。我们如何在矩阵分解中做同样的直觉?