给定一个维数为nxn的矩阵M,如何计算低秩因式分解,使得M=L.T*L,其中L是维数kxn的。到目前为止,我只看到使用SVD来完成这个任务,这并不是我想要的,因为这个方法给了我M=USV和U.t!=S*V,与(L.T)相反。T==L
另一种选择是使用某种形式的优化来找到L,但这并不简单,因为我已经尝试过SciPy的几种优化方法,在frobenius范数下使用不同的M-L.t*L,但到目前为止我还没有成功。在
编辑:我忘了补充一点,通过使用scikit的非负矩阵分解类,我可以部分地通过传递L和L.T作为优化的候选矩阵来实现这一点。但是,我的矩阵M不是非负的,所以这个方法对我不适用。在
答案取决于你对矩阵的了解。在
如果矩阵是半正定的,可以使用Cholesky Factorization, 使用旋转来保持稳定性。在
在其他假设下,解决方案可能不存在。在
例如,如果不存在解决方案,则以下矩阵没有解决方案:
证明:假设答案存在。然后解决方案如下:
^{pr2}$因此,以下必须是正确的:
a*a + b*c == 0
d*d + b*c == 0
c * (a+d) == 0
b * (a+d) == 1
根据3。
(c == 0) or ((a+d) == 0)
如果}。如果这是真的,那么
c == 0
,则根据1。和2。a == 0
和{(a+d) == 0
就等于4。不可能的。在如果
(a+d) == 0
,则为4。是不可能的。在矛盾的是,我们知道这个矩阵不可能有你所要求的分解。在
相关问题 更多 >
编程相关推荐