标签:l% 7D% 7Bl% 20% 复现 TRMF plus _% 乘法
1 目标函数(总)
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,rank
vec0 = 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
其中:
| |
|
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求导,有
于是我们可以写成
几部分拼起来,有
=0
=
+
所以xo(o≥ld+1)的更新公式为
3 更新θ
我们留下和θ (θk)有关的部分
关于θk求导
4 总结
x:
t ∈ 1~ld:
t ≥ld+1
标签:l%,7D%,7Bl%,20%,复现,TRMF,plus,_%,乘法 来源: https://blog.csdn.net/qq_40206371/article/details/121215548
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。