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

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

输出结果


先看结果

image.png





实现代码


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

 

相关文章
|
3月前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
81 2
|
4月前
|
机器学习/深度学习 算法 搜索推荐
django调用矩阵分解推荐算法模型做推荐系统
django调用矩阵分解推荐算法模型做推荐系统
69 4
|
7月前
|
并行计算 算法 Python
Dantzig-Wolfe分解算法解释与Python代码示例
Dantzig-Wolfe分解算法解释与Python代码示例
|
9月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于DCT变换和位平面分解的数字水印嵌入提取算法matlab仿真
这是一个关于数字水印算法的摘要:使用MATLAB2022a实现,结合DCT和位平面分解技术。算法先通过DCT变换将图像转至频域,随后利用位平面分解嵌入水印,确保在图像处理后仍能提取。核心程序包括水印嵌入和提取,以及性能分析部分,通过PSNR和NC指标评估水印在不同噪声条件下的鲁棒性。
|
9月前
|
算法 vr&ar
保持无损连接的BCNF分解算法
保持无损连接的BCNF分解算法
144 1
|
9月前
|
编解码 算法 jenkins
【MATLAB 】 小波分解-ARIMA联合时序预测算法,科研创新优选算法
【MATLAB 】 小波分解-ARIMA联合时序预测算法,科研创新优选算法
234 0
|
9月前
|
并行计算 算法 计算机视觉
【MATLAB 】 EMD信号分解+模糊熵(近似熵)算法
【MATLAB 】 EMD信号分解+模糊熵(近似熵)算法
159 0
|
9月前
|
并行计算 算法 计算机视觉
【MATLAB 】 EEMD 信号分解+模糊熵(近似熵)算法
【MATLAB 】 EEMD 信号分解+模糊熵(近似熵)算法
281 0
|
9月前
|
并行计算 算法 计算机视觉
【MATLAB 】 CEEMD 信号分解+模糊熵(近似熵)算法
【MATLAB 】 CEEMD 信号分解+模糊熵(近似熵)算法
244 0
|
9月前
|
并行计算 算法 计算机视觉
【MATLAB 】 CEEMDAN 信号分解+模糊熵(近似熵)算法
【MATLAB 】 CEEMDAN 信号分解+模糊熵(近似熵)算法
447 0

热门文章

最新文章