# 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)

4054 0

323 0
ML之xgboost：利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
ML之xgboost：利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
17 0

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

2576 0

10760 0

403 0

3185 0
+关注

1701

0

《SaaS模式云原生数据仓库应用场景实践》

《看见新力量：二》电子书