欣小白的點滴 矩陣分解

2021-10-08 10:13:06 字數 3689 閱讀 2839

一.矩陣的乘法運算

例如:

注意:1.只有在下列情況下,兩個矩陣的乘法才有意義,或說乘法運算是可行的:左矩陣的列數=右矩陣的行數。

2.在矩陣的乘法中,必須注意相乘的順序.即使在ab與ba均有意義時,也未必有ab=ba成立.可見矩陣乘法不滿**換律

矩陣的轉置:

二.介紹矩陣分解。

以使用者-專案評分矩陣為例,矩陣分解就是**出評分矩陣中的缺失值,然後根據**值以某種方式向使用者推薦。

經典案例

要做推薦系統,最基本的乙個資料就是,使用者-物品的評分矩陣

矩陣中,描述了5個使用者(u1,u2,u3,u4 ,u5)對4個物品(d1,d2,d3,d4)的評分(1-5分),- 表示沒有評分,現在目的是把沒有評分的 給**出來,然後按**的分數高低,給使用者進行推薦。 如何**缺失的評分呢?對於缺失的評分,可以轉化為基於機器學習的回歸問題,也就是連續值的**,對於矩陣分解有如下式子,r是類似圖1的評分矩陣,假設nm維(n表示行數,m表示列數),可以分解為p跟q矩陣,其中p矩陣維度nk,q矩陣維度k*m。

三.**示例。

```c

import numpy as np

import math

import matplotlib.pyplot as plt

#矩陣分解函式

def matrix_decomposition

(r,p,q,n,m,k,alpha=

0.0002

,beta=

0.02):

q = q.t #q的轉置矩陣

loss_list =

#儲存每次迭代計算的loss值

for step in range

(5000):

#更新r^

for i in range

(n):

for j in range

(m):

if r[i]

[j]!=0:

#計算損失函式

error = r[i]

[j]for k in range

(k):

error -

= p[i]

[k]*q[k]

[j] #優化p,q矩陣的元素

for k in range

(k):

p[i]

[k]= p[i]

[k]+ alpha*(2

*error*q[k]

[j]-beta*p[i]

[k])

q[k]

[j]= q[k]

[j]+ alpha*(2

*error*p[i]

[k]-beta*q[k]

[j])

loss =

0.0 #計算每一次迭代後的loss大小,就是原來r矩陣裡面每個非缺失值跟**值的平方損失

for i in range

(n):

for j in range

(m):

if r[i]

[j]!=0:

#計算loss公式加號的左邊

data =

0for k in range

(k):

data = data + p[i]

[k]*q[k]

[j] loss = loss + math.

pow(r[i]

[j]-data,2)

#得到完整loss值

for k in range

(k):

loss = loss + beta/2*

(p[i]

[k]*p[i]

[k]+q[k]

[j]*q[k]

[j])

loss_list.

(loss)

plt.

scatter

(step,loss)

#輸出loss值

if(step+1)

%1000==0

:print

("loss="

.format

(loss)

) #判斷

if loss <

0.001

:print

(loss)

break

plt.

show()

return p,q

if __name__ ==

"__main__"

: n =

5 m =

4 k =

5#我們給定k的值為5

r = np.

array([

[5,3

,0,1

],[4

,0,0

,1],

[1,1

,0,5

],[1

,0,0

,4],

[0,1

,5,4

]]) #n=

5,m=

4print

("初始評分矩陣:"

)print

(r) #定義p和q矩陣

p = np.random.

rand

(n,k) #n=

5,k=

2 q = np.random.

rand

(m,k) #m=

4,k=

2print

("開始矩陣分解:"

) p,q =

matrix_decomposition

(r,p,q,n,m,k)

print

("矩陣分解結束。"

)print

("得到的**矩陣:"

)print

(np.

dot(p,q)

)

結果顯示:

四.矩陣演算法的優缺點。

優點:將高維的矩陣對映成兩個低維矩陣的乘積,解決了資料稀疏的問題;

**的精度較高,高於基於領域的協同過濾以及基於內容等方法。

缺點:推薦結果無法解釋,其隱空間中的維度無法與現實中的概念對應起來;

模型訓練比較費時,比如只能天粒度離線訓練。

矩陣的分解

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...

矩陣的Crout分解

本函式將乙個滿秩方陣按crout方式分解 function l,u crout a b size a b 1 行 b 2 列 n b 1 這裡只處理n n的非奇異矩陣 錯誤檢查 if b 1 b 2 非方陣錯誤 error matlab crout input matrix should be a ...

矩陣的各種分解

對於矩陣為高維的情況下,這個變換就對應著很多方向的變化,我們 1 at b t 1at b 則稱a與b相似,記作a b,從a到b的這種變化稱為相似變換,t稱為相似變換矩陣。矩陣的相似關係是一種等價關係 並不是相等 相似矩陣滿足以下特性 對稱性 若a b,則b a 傳遞性 若a b,b a,則a c ...