大稀疏矩阵的低秩近似

问题描述

我试图用一个低秩矩阵来近似一个大矩阵。

我有矩阵 mat_to_use,其中每一列代表一个文件的词袋之类的东西;矩阵本身表示为 scipy 稀疏矩阵。我想使用这个矩阵来搜索文件中的上下文。

问题是,基本搜索会产生很多噪音。出于这个原因,我选择了 SVD 来删除它。

我是这样做的:

U,E,VT = scipy.sparse.linalg.svds(mat_to_use.T,100)
S = np.diag(E)
r = scipy.sparse.csc_matrix(U @ S @ VT)

请注意 - 文件 i 的词袋存储在矩阵的 i 列中,而行表示词索引。这就是我为 SVD 转置矩阵的原因。

但是有一个问题。我有超过 2000 个文件,原始硬盘大小超过 1.4GB。
mat_to_use 矩阵是稀疏的,但 VT 矩阵无论如何都不是。 虽然 mat_to_use 需要大约 500MB 来存储,但矩阵乘法过程需要超过 20GB 的 ram 才能完成,这让我无法计算。

是否有更好的解决方案来解决这个问题? SVD 分解本身并不需要很长时间,而且内存使用是合理的,但矩阵乘法步骤是我不能接受的,因为我觉得必须有一个更好的解决方案 - 也许有一种方法可以近似一个较低的 -秩矩阵就位?

解决方法

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

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

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