MF小测试
#ML之RS之MF:基于簡(jiǎn)單的張量分解MF算法進(jìn)行打分和推薦
import numpydef matrix_factorization(R, P, Q, K, steps=5000, alpha=0.0002, beta=0.02): #(迭代次數(shù)5000、步長(zhǎng),正則化系數(shù))Q = Q.Tfor 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 = 0for 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:breakreturn P, Q.T#讀取user數(shù)據(jù)并用張量分解進(jìn)行打分
#定義得分矩陣
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 #兩個(gè)因子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)
結(jié)果輸出:?
?
?
?
總結(jié)
- 上一篇: Shorten command line
- 下一篇: cnn卷积中padding作用