給出如上乙個打分矩陣r(5,4),「——」表示未打分,
n行m列,n表示user個數,m表示item個數
問題是:如何得到未打分的商品進行有效的**?
——矩陣分解的思想可以解決這個問題,其實這種思想可以看作是有監督的機器學習問題(回歸問題)
矩陣r可以近似表示為p與q的乘積:r(n,m)≈ p(n,k)*q(k,m)
將原始的評分矩陣rm
×n'>分解成兩個矩陣rm
×n'>pm×
k'>和rm
×n'>rm×
n'>pm×
k'>qk×
n'>的乘積:rm
×n'>n,k表示n個user和k個特徵值間的關係矩陣 q(k,m)表示m個item和k個特徵值間的關係矩陣 現在就是求矩陣 q ,prm
×n'>最終推導結果為:
矩陣分解在打分預估系統中得到了成熟的發展和應用
#from pylab import *
import
matplotlib.pyplot as plt
from math import
powimport
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): #
bushu
for i in range(len(r)): #
nfor j in range(len(r[0])): #
mif 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[0])):
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))
#把新生成的e加到原來的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=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)
#print(result[4999])
#-------------損失函式的收斂曲線圖---------------
n=len(result)
x=range(n)
plt.plot(x,result,color='
b',linewidth=6)
plt.title(
"convergence curve")
plt.xlabel(
"generation")
plt.ylabel(
"loss")
plt.show()
推薦系統ALS矩陣分解
思想類似線性回歸做 大致如下 定義乙個 模型 數學公式 然後確定乙個損失函式,將已有資料作為訓練集,不斷迭代來最小化損失函式的值,最終確定引數,把引數套到 模型中做 矩陣分解的 模型是 損失函式是 我們就是要最小化損失函式,從而求得引數q和p。矩陣分解模型的物理意義 我們希望學習到乙個p代表user...
推薦系統之矩陣分解模型注(三)
這個看起來高大上的系列註解文章,到這個階段便是最重要的部分了。有人說,人工智慧就是概率論與統計學,實際上我也認為差不多,只是實現人工智慧的工具,內部的原理是概率論的知識。科普篇 推薦系統之矩陣分解模型 原理篇 推薦系統之矩陣分解模型 實踐篇 推薦系統之矩陣分解模型 1.1 殘差 1.2 殘差平方和 ...
推薦系統例項 基於矩陣分解
使用matlab嘗試了隨機梯度下降的矩陣分解方法,實現了乙個比較簡單的推薦系統的原理。常用推薦系統的方法有協同過濾,基於物品內容過濾等等。這次是用的矩陣分解模型屬於協同過濾的一種方法,大致原理是通過一定數量的因子來描述各個使用者的喜好和各個物品的屬性。通過隨機梯度下降法分解後得到兩個矩陣,乙個是使用...