基於內容的推薦(content-based recommendation)
協同過濾的推薦(collaborative filtering recommendation)
基於關聯規則的推薦(association rule-based recommendation)
基於效用的推薦(utility-based recommendation)
基於知識的推薦(knowledge-based recommendation)
組合推薦(hybrid recommendation)
在推薦系統中,最重要的資料是使用者對商品的打分資料,資料形式如下所示:
d1d2
d3d4u15
3-1u2
4--1
u311-
5u41-
-4u5-
154其中,u1⋯u5表示的是5個不同的使用者,d1⋯d4表示的是4個不同的商品,這樣便構成了使用者-商品矩陣,在該矩陣中,有使用者對每一件商品的打分,其中「-」表示的是使用者未對該商品進行打分。
在推薦系統中有一類問題是對未打分的商品進行評分的**。
其中,矩陣pm×k表示的是m個使用者與k個主題之間的關係,而矩陣qk×n表示的是k個主題與n個商品之間的關係。
最終,需要求解所有的非「-」項的損失之和的最小值:
求解損失函式的負梯度:
根據負梯度的方向更新變數:
通過迭代,直到演算法最終收斂。
利用梯度下降法的求解過程為:
求解損失函式的負梯度:
根據負梯度的方向更新變數:
通過迭代,直到演算法最終收斂。
'''#原始矩陣,主題數,迭代次數,步長
def sgd(mat_data,k,iterate_times,alpha):
m = mat_data.shape[0] #shape[0]是矩陣的行
n = mat_data.shape[1] #shape[1]是矩陣的列
#隨機資料初始化
p = np.random.random((m,k))
q = np.random.random((k,n))
for times in range(iterate_times):
i = random.randint(0,m-1)
j = random.randint(0,n-1)
p[i,:] -= alpha * (np.dot(p[i,:],q[:,j]) - mat_data[i,j])* q[:,j]
q[:,j] -= alpha *( np.dot(p[i,:],q[:,j]) - mat_data[i,j] )* p[i,:]
#列印誤差
# print(abs(np.dot(p[i,:],q[:,j]) - mat_data[i,j] ))
return p,q
'''--------------------------begin--------------------------------------
'''data = np.array([
[0,63,3,7],
[2,3,0,6],
[3,5,46,1]
],float)
a = sgd(data,1000,50000,0.001)
#列印p,q,以及**mat m
矩陣分解 Cholesky分解
矩陣分解是將矩陣拆解為數個矩陣的乘積,可分為三角分解 滿秩分解 qr分解 jordan分解和svd 奇異值 分解等。cholesky分解法是求解對稱正定線性方程組最常用的方法之一。可採用如下命令 r chol a 產生乙個上三角陣r,使r r a。若a為非對稱正定,則輸出乙個出錯資訊。r,p cho...
非負矩陣分解 低秩矩陣分解
一般的矩陣分解,分解的矩陣有正有負。很多實際應用中,負數沒有意義,如文字等等。nmf中要求原矩陣和分解後矩陣都為非負矩陣,這個分解存在唯一。引入稀疏,區域性計算。以人臉識別為例 v r n m v in r v r n m m張臉,每張圖n個畫素 w r n r w in r w r n r 基矩陣...
矩陣的分解
matlab中有這個恒等式 a triu a,1 tril a,1 diag diag a 將矩陣分解為乙個上三角陣 下三角陣和乙個對角陣。測試如下 format compact a 1 2 3 4 5 6 7 8 9 a 1 2 3 4 5 6 7 8 9 u triu a,1 u 0 2 3 0...