scipy 用矩阵代替向量求最小二乘

z4bn682m  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(69)

问题是要找到Z,使得ε(E)(等式21)最小化。
Z是一个MxN矩阵,这是我们需要找到的。Zx和Zy也是已知的MxN矩阵。Dx和Dy是执行数值微分的NxN矩阵(参见照片中红色圈出的矩阵),因此它们也是已知的矩阵。F表示“Fobrenius范数”或“条目范数”。
如何解决这个问题?我知道如何解决向量的最小二乘问题,但现在它是矩阵形式,我卡住了。
谢谢

hgncfbus

hgncfbus1#

这里的技巧是使用Kronecker Product
$$ \begin{align*} {\left| \boldsymbol{D}{y} \boldsymbol{Z} - \hat{\boldsymbol{Z}}{y} \right|}{F}^{2} & \rightarrow {\left| \left( \boldsymbol{I} \otimes \boldsymbol{D}{y} \right) \boldsymbol{z} - \hat{\boldsymbol{z}}{y} \right|}{2}^{2} = {\left| \hat{\boldsymbol{D}{y}} \boldsymbol{z} - \hat{\boldsymbol{z}}{y} \right|}{2}^{2} \ {\left| \boldsymbol{Z} \boldsymbol{D}{x}^{T} - \hat{\boldsymbol{Z}}{x} \right|}{F}^{2} & \rightarrow {\left| \left( \boldsymbol{D}{x} \otimes \boldsymbol{I} \right) \boldsymbol{z} - \hat{\boldsymbol{z}}{x} \right|}{2}^{2} = {\left| \hat{\boldsymbol{D}{x}} \boldsymbol{z} - \hat{\boldsymbol{z}}{x} \right|}{2}^{2} \end{align*} $$
x1c 0d1x的数据
这相当于解决:
$$ {\left|\boldsymbol{D} \boldsymbol{z} - \hat{\boldsymbol{z}} \right| {2}^{2} $$



其中矩阵$\boldsymbol{D}$是通过水平堆叠矩阵,$\hat{\boldsymbol{z}$是通过垂直堆叠矩阵。
该实现应该利用相关矩阵的稀疏属性,因此计算方面与原始公式一样有效。

i34xakig

i34xakig2#

使用该

normF(A*Z-B)^2=trace((A*Z-B).T*(A*Z-B))

字符串
对于dZ方向的方向导数,

2*trace((A*dZ).T*(A*Z-B))=dotF(dZ,A.T*(A*Z-B))


这通常被解释为导数是A.T*(A*Z-B)
在另一项中,你得到类似的,

normF(Z*A.T-B.T)^2 = trace((A*Z.T-B)*(Z*A.T-B.T))


方向导数

2*trace(A*dZ.T*(Z*A.T-B.T))=dotF(dZ,(Z*A.T-B.T)*A)


xy添加到矩阵名称中,

2*Z*(Ax.T*Ax) + 2*(Ay.T*Ay)*Z - 2*Bx.T*Ax - 2*Ay.T*By


以下形式的公式

Z*Qx + Qy*Z = C


现在取对角线Q=U*D*U.T与正交U和对角线D,左乘Uy.T,右乘Ux,得到

(Uy.T*Z*Ux)*Dx + Dy*(Uy.T*Z*U) = (Uy.T*C*Ux)


并可读出求解算法,逐元素计算(Uy.T*Z*Ux),然后通过矩阵乘法得到Z

相关问题