给定一个维度为 nxn 的矩阵 M,我如何计算一个低秩分解,使得 M = LT * L,其中 L 的维度为 kxn。到目前为止,我只看到使用 SVD 完成此操作,这并不是我想要的,因为该方法给了我 M = U S V 和 UT != S*V,而不是 (LT).T == L .
另一种选择可能是使用某种形式的优化来找到 L,但这并不简单,因为我已经尝试了 SciPy 的几种优化方法,在 frobenius 范数下具有差异 M - LT * L,到目前为止我还没有没有成功。
编辑:我忘了通过使用 scikit 的非负矩阵分解类来补充这一点,我可以通过将 L 和 LT 作为优化的候选矩阵传递来部分地实现这一点。但是,我的矩阵 M 不是非负数,因此这种方法对我不起作用。