具有加权行和的近似低秩矩阵

问题描述

我想近似给定的 n x m 矩阵 An >> m 作为一些 Wk 的加权和 B (理想情况下从 A 中选择,但也可以是任意的)。权重总和必须为 1,并且必须为正数。

import numpy as np
n = 1000 # rows
m = 3 # columns
k = 2 # hidden rank
# create random matrix with rank k
A = np.random.rand(n,k).dot(np.random.rand(k,m))
# estimate hidden rank
u,s,vt = np.linalg.svd(A,full_matrices=False,compute_uv=True)
k_est = np.count_nonzero(~np.isclose(s,0))
# truncate to k_est
B = np.diag(s[:k_est]) @ vt[...,:k_est,:]
W = u[...,:k_est]

# do some magic with B and W to come up with

assert np.all(W >= 0)
assert np.all(np.isclose(W.sum(1),1))
assert np.all(np.isclose(A,W @ B))

我尝试使用 SVD,它能够通过 W @ B 重现 A,但权重为负且不等于 1。

根据我的直觉,我似乎在寻找 A 的凸包,但只有 k_est 点。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)