政策资讯

Policy Information


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

来源: 重庆市软件正版化服务中心    |    时间: 2022-09-19    |    浏览量: 51023    |   

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

目录

输出结果

实现代码


输出结果

先看结果

实现代码

  1. ML之RS之MF:基于简单的张量分解MF算法进行打分和推荐
  2. import numpy
  3. def matrix_factorization(R, P, Q, K, steps=5000, alpha=0.0002, beta=0.02): (迭代次数5000、步长,正则化系数)
  4. Q = Q.T
  5. for step in range(steps):
  6. for i in range(len(R)):
  7. for j in range(len(R[i])):
  8. if R[i][j] > 0:
  9. eij = R[i][j] - numpy.dot(P[i,:],Q[:,j])
  10. for k in range(K):
  11. P[i][k] = P[i][k] + alpha * (2 * eij * Q[k][j] - beta * P[i][k])
  12. Q[k][j] = Q[k][j] + alpha * (2 * eij * P[i][k] - beta * Q[k][j])
  13. eR = numpy.dot(P,Q)
  14. e = 0
  15. for i in range(len(R)):
  16. for j in range(len(R[i])):
  17. if R[i][j] > 0:
  18. e = e + pow(R[i][j] - numpy.dot(P[i,:],Q[:,j]), 2)
  19. for k in range(K):
  20. e = e + (beta/2) * (pow(P[i][k],2) + pow(Q[k][j],2))
  21. if e < 0.001:
  22. break
  23. return P, Q.T
  24. 读取user数据并用张量分解进行打分
  25. 定义得分矩阵
  26. R = [
  27. [5,3,0,1],
  28. [4,0,3,1],
  29. [1,1,0,5],
  30. [1,0,0,4],
  31. [0,1,5,4],
  32. ]
  33. R = numpy.array(R)
  34. N = len(R)
  35. M = len(R[0])
  36. K = 2 两个因子
  37. P = numpy.random.rand(N,K)
  38. Q = numpy.random.rand(M,K)
  39. nP, nQ = matrix_factorization(R, P, Q, K)
  40. nR = numpy.dot(nP, nQ.T)
  41. print(nP)
  42. print("-----------------------------")
  43. print(nQ)
  44. print("-----------------------------")
  45. print(nR)
  46. print("-----------------------------")
  47. print(R)

评论

产品推荐

更多 >

QQ咨询 扫一扫加入群聊,了解更多平台咨询
微信咨询 扫一扫加入群聊,了解更多平台咨询
意见反馈
立即提交
QQ咨询
微信咨询
意见反馈