TRMF 辅助论文:最小二乘法复现TRMF
1 目標函數(總)
論文筆記:Temporal Regularized Matrix Factorization forHigh-dimensional Time Series Prediction_UQI-LIUWJ的博客-CSDN博客
1.1 求解W
我們留下含有W的部分:
?
然后對wi求導
線性代數筆記:標量、向量、矩陣求導_UQI-LIUWJ的博客-CSDN博客
而是一個標量,所以放在xi的左邊和右邊沒有影響
所以
也即:
?對應的代碼如下:(假設sparse_mat表示 觀測矩陣)
from numpy.linalg import inv as inv for i in range(dim1):#W矩陣的每一行分別計算pos0 = np.where(sparse_mat[i, :] != 0)#[num_obs] 表示i對應的有示數的數量Xt = X[pos0[0], :]#[num_obs,rankvec0 = sparse_mat[i, pos0[0]] @ Xt#sparse_mat[i, pos0[0]] 是一維向量,#所以sparse_mat[i, pos0[0]] @ Xt 和 sparse_mat[i, pos0[0]].T @ Xt 是一個意思,#輸出的都是一個一維向量#[rank,1]mat0 = inv(Xt.T @ Xt + np.eye(rank))#[rank,rank]W[i, :] = mat0 @ vec0?其中:
| vec0 = sparse_mat[i, pos0[0]] @ Xt | |
| mat0 = inv(Xt.T @ Xt + np.eye(rank)) |
1.2 求解X
我們留下含有X的部分
表示逐元素乘積 (兩個向量a和b,ab可以用diag(a) b表示)
當t=1~ld的時候,我們沒有什么事情,所以此時我們更新X的方式和之前的W差不多
同理,X的更新方式為:
而當t≥ld+1的時候,我們就需要考慮了
對于任意xt(我們令其為xo),他會出現在哪些中呢?
首先 是?
對xo求導,有:
其次,是所有的?
對每一個l,有用的項就是xo相關的項,于是我們可以寫成,對每一個l的
對xo求導,有
還要注意一點,此時我們考慮的是下標為o+l的AR,所以o+l需要大于ld,小于T,也就是此時o的范圍是o>ld-l ,<T-l【也就是說,在ld之前的xo也會有一定的AR的更新項】
于是我們可以寫成
幾部分拼起來,有
=0
=
+
所以xo(o≥ld+1)的更新公式為
[+]
?代碼如下:
for t in range(2):pos0 = np.where(sparse_mat[:, t] != 0)#[num_obs] 表示i對應的有示數的數量Wt = W[pos0[0], :]#[num_obs,rank],t可見的wiMt = np.zeros((rank, rank))#\sum diad (theta * theta)的那個矩陣Nt = np.zeros(rank)#Nt 相當于是 sum theta* x_{t-l}if t < np.max(time_lags):#這一個if,else考慮到的是首先的部分Pt = np.zeros((rank, rank))#t<ld的時候,是沒有λx I的Qt = np.zeros(rank)#t<ld的時候,沒有過去時間段的回歸項else:Pt = np.eye(rank)#t>ld+1的時候 有λx IQt = np.einsum('ij, ij -> j', theta, X[t - time_lags, :])#theta [d,rank]#X[t - time_lags, :] [d,rank]'''對于每一個theta和X[t - time_lags, :]中的j (j∈range(rank))我們輸出是一個rank長的向量,第j維是每個theta的(i,j)元素和對應的X的(i,j)元素相乘,然后求和每個theta的(i,j)元素表示向量第j個元素的第i個time lag的AR權重每個X的(i,j)元素表示向量第j個元素的第i個time lag的數據相乘再1求和,就是輸出的第j個元素,有之前的時序數據加權求和得到的自歸回值''''''換一個角度理解,就是theta和X[t - time_lags, :]逐元素乘積,再從一個[d,rank]矩陣,壓縮成一個rank長的向量即np.sum(theta*X[t - time_lags, :],axis=0)'''if t < dim2 - np.min(time_lags):#這個if 考慮的是其次的部分,所以需要t+l>ld 且t+l<T#(ld是max(time_lags),T是dim2#t+min(lag)小于Tif t >= np.max(time_lags) and t < dim2 - np.max(time_lags):index = list(range(0, d))#t>=ld,同時t+max(ld)也沒有超過最大的時間限制,此時所有的d個time lad都可以使用 else:index = list(np.where((t + time_lags >= np.max(time_lags)) & (t + time_lags < dim2)))[0]#在兩頭,計算可以用的o+lfor k in index:Ak = theta[k, :]#[rank]Mt += np.diag(Ak ** 2)#對應的是Σdiag(θk*θk)theta0 = theta.copy()theta0[k, :] = 0#第k行賦值為0的作用,就是Σ_{l'∈L-{l}}Nt += np.multiply(Ak, X[t + time_lags[k], :] - np.einsum('ij, ij -> j',theta0,X[t + time_lags[k] - time_lags, :]))'''AK——θl [rank]X[t + time_lags[k], :] x_{o+l}np.einsum('ij, ij -> j',theta0, X[t + time_lags[k] - time_lags, :])對于每一個theta0和XX[t + time_lags[k] - time_lags, :]中的j (j∈range(rank))我們輸出是一個rank長的向量,第j維是每個theta的(i,j)元素和對應的X的(i,j)元素相乘,然后求和每個theta的(i,j)元素表示向量第j個元素的第i個time lag的AR權重每個X的(i,j)元素表示向量第j個元素的第i個time lag的數據相乘再求和,就是輸出的第j個元素,有之前的時序數據加權求和得到的自歸回值(之前的時間序列不包括l,因為那一行被賦值為0了)'''#也就是Nt相當于其次括號里面的第一項vec0 = Wt.T @ sparse_mat[pos0[0], t] + lambda_x * Nt + lambda_x * Qt#Wt.T @ sparse_mat[pos0[0], t] [rank]#lambda_x * Nt 第一項#lambda_x * Qt 第二項mat0 = inv(Wt.T @ Wt + lambda_x * Mt + lambda_x * Pt + lambda_x * eta * np.eye(rank))#分別是第一項、第四項、第二項、第三項X[t, :] = mat0 @ vec0?vec0:
?+]
mat0:
3 更新θ
我們留下和θ (θk)有關的部分
關于θk求導
4 總結
x:
t ∈ 1~ld:
t ≥ld+1???[+]
?
總結
以上是生活随笔為你收集整理的TRMF 辅助论文:最小二乘法复现TRMF的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DQN笔记:MC TD
- 下一篇: 错误处理:one of the vari