日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

矩阵分解法做推荐系统

發布時間:2025/4/5 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 矩阵分解法做推荐系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

# !/usr/bin/env python # encoding: utf-8 __author__ = 'Scarlett' #矩陣分解在打分預估系統中得到了成熟的發展和應用 # from pylab import * import matplotlib.pyplot as plt from math import pow import numpydef 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=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))result.append(e)if e<0.001:breakreturn P,Q.T,resultif __name__ == '__main__': # R=[ # [5,3,0,1], # [4,0,0,1], # [1,1,0,5], # [1,0,0,4], # [0,1,5,4] # ]R=[[4., 3., 0., 5., 0.],[5., 0., 4., 4., 0.],[4., 0., 5., 0., 3.],[2., 3., 0., 1., 0.],[0., 4., 2., 0., 5.]]R=numpy.array(R)N=len(R)M=len(R[0])K=2P=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()

總結

以上是生活随笔為你收集整理的矩阵分解法做推荐系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。