【发布时间】:2018-02-16 13:26:42
【问题描述】:
给定一个维度为 nxn 的矩阵 M,我如何计算一个低秩分解,使得 M = L.T * L,其中 L 的维度为 kxn。到目前为止,我只看到使用 SVD 完成此操作,这并不是我想要的,因为该方法给了我 M = USV 和 UT != S*V,而不是 ( LT).T == L.
另一种选择可能是使用某种形式的优化来找到 L,但这并不简单,因为我已经尝试了几种 SciPy 的优化方法,在 frobenius 范数下具有 M - LT * L 的差异,到目前为止我没有成功。
编辑:我忘了补充一点,通过使用 scikit 的非负矩阵分解类,我可以通过传递 L 和 L.T 作为优化的候选矩阵来部分实现这一点。但是,我的矩阵 M 不是非负数,因此这种方法对我不起作用。
【问题讨论】:
-
你说“什么是最好的方法……”但是你说的最好是什么意思?你的意思是最快的执行?最低的复杂性?最容易阅读和理解?最容易编码? -- 你还说“我试过'x',但这不是我想要的”它有什么问题?你想要什么?似乎 SVD 是找到分解的好方法。
-
感谢您的评论,我改进了问题以解决您的建议。
-
这个问题似乎更适合math.stackexchange。我不会投票结束,因为这个问题是关于算法的,它在网站的条款范围内。但是,您在这里可能得不到好的答案。
-
我觉得更适合scicomp
标签: python optimization scipy scikit-learn matrix-factorization