我正在尝试实现本文提到的内核化概率矩阵分解。 KPMF Paper。我已经将两个更新函数编码为两个单独的方法。我不知道这是否是正确的实现。有人可以帮助我了解实施是否正确吗?以下是两个功能:
def run_U(self,U,V,R,en,su):
Uhat = np.zeros(U.shape)
for i in range(U.shape[0]):
en.fill(0)
for z in range(U.shape[1]):
fty = 0
en[0,i] = 1
gty = (en.dot(su)).dot(U[:,z])
for k in range(len(V)):
if R[i,k] != 0:
fty += (R[i,k] - (U[i,:].dot((V[k,:]).T)))*(V[k,z].T)
else:
fty = 0
Uhat[i,z] = gty+fty
return Uhat
def run_V(self,U,V,R,em,sv):
Vhat = np.zeros(V.shape)
for i in range(V.shape[0]):
em.fill(0)
for z in range(V.shape[1]):
fty = 0
em[0,i] = 1
gty = (em.dot(sv)).dot(V[:,z])
for k in range(len(U)):
if R[k,i] != 0:
fty += (R[k,i] - (U[k,:].dot((V[i,:]).T)))*(U[k,z].T)
else:
fty = 0
Vhat[i,z] = gty + fty
return Vhat