ML之RS之MF(基于简单的张量分解MF算法进行打分和推荐)

ML之RS之MF:基于简单的张量分解MF算法进行打分和推荐



目录
输出结果
实现代码



输出结果 先看结果
ML之RS之MF(基于简单的张量分解MF算法进行打分和推荐)
文章图片



实现代码

#ML之RS之MF:基于简单的张量分解MF算法进行打分和推荐 import numpy def matrix_factorization(R, P, Q, K, steps=5000, alpha=0.0002, beta=0.02):#(迭代次数5000、步长,正则化系数) 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: eij = R[i][j] - numpy.dot(P[i,:],Q[:,j]) for k in range(K): 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,:],Q[:,j]), 2) for k in range(K): e = e + (beta/2) * (pow(P[i][k],2) + pow(Q[k][j],2)) if e < 0.001: break return P, Q.T #读取user数据并用张量分解进行打分 #定义得分矩阵 R = [ [5,3,0,1], [4,0,3,1], [1,1,0,5], [1,0,0,4], [0,1,5,4], ] 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, P, Q, K) nR = numpy.dot(nP, nQ.T) print(nP) print("-----------------------------") print(nQ) print("-----------------------------") print(nR) print("-----------------------------") print(R)



【ML之RS之MF(基于简单的张量分解MF算法进行打分和推荐)】

    推荐阅读