ML 矩陣分解

2021-09-14 07:40:35 字數 2545 閱讀 2916

基於內容的推薦(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...