pythonMF代码

Posted 江枫1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pythonMF代码相关的知识,希望对你有一定的参考价值。

推荐系统之矩阵分解及其Python代码实现

https://www.cnblogs.com/shenxiaolin/p/8637794.html


# !/usr/bin/env python # encoding: utf-8 __author__ = \'Scarlett\' #矩阵分解在打分预估系统中得到了成熟的发展和应用 # from pylab import * import matplotlib.pyplot as plt from math import pow import numpy def matrix_factorization(R,P,Q,K,steps=5000,alpha=0.0002,beta=0.02): Q=Q.T # .T操作表示矩阵的转置 result=[] 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]) # .dot(P,Q) 表示矩阵内积 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)) result.append(e) if e<0.001: break return P,Q.T,result if __name__ == \'__main__\': R=[ [5,3,0,1], [4,0,0,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) #随机生成一个 N行 K列的矩阵 Q=numpy.random.rand(M,K) #随机生成一个 M行 K列的矩阵 nP,nQ,result=matrix_factorization(R,P,Q,K) print("原始的评分矩阵R为:\\n",R) R_MF=numpy.dot(nP,nQ.T) print("经过MF算法填充0处评分值后的评分矩阵R_MF为:\\n",R_MF) #-------------损失函数的收敛曲线图--------------- n=len(result) x=range(n) plt.plot(x,result,color=\'r\',linewidth=3) plt.title("Convergence curve") plt.xlabel("generation") plt.ylabel("loss") plt.show()

  

以上是关于pythonMF代码的主要内容,如果未能解决你的问题,请参考以下文章

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

VSCode自定义代码片段——CSS选择器

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数

片段和活动之间的核心区别是啥?哪些代码可以写成片段?