Policy Information
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)
评论