一.矩陣的乘法運算
例如:
注意: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 ...