微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大稀疏矩阵的低秩近似

如何解决大稀疏矩阵的低秩近似

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

我有矩阵 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 举报,一经查实,本站将立刻删除。