在 Python 中对稀疏矩阵执行分解
Posted
技术标签:
【中文标题】在 Python 中对稀疏矩阵执行分解【英文标题】:Performing Decomposition on Sparse Matrices in Python 【发布时间】:2015-07-07 22:30:24 【问题描述】:我正在尝试使用sklearn
库在 Python 中的大型稀疏矩阵中分解组件中的信号(矩阵分解)。
我利用 scipy 的scipy.sparse.csc_matrix
来构建我的数据矩阵。但是我无法执行任何分析,例如因子分析或独立成分分析。我唯一能做的就是使用 truncatedSVD
或 scipy 的 scipy.sparse.linalg.svds
并执行 PCA。
有人知道在 python 中对稀疏矩阵进行 ICA 或 FA 的任何变通方法吗?任何帮助将非常感激!谢谢。
【问题讨论】:
【参考方案1】:给定:
M = UΣV^t
SVD 的缺点是矩阵 U 和 V^t 是密集矩阵。输入矩阵是否稀疏并不重要,U 和 T 将是密集的。此外,SVD 的计算复杂度为 O(n^2*m) 或 O(m^2*n),其中 n 是输入矩阵 M 中的行数,m 是列数。这取决于哪个最大.
值得一提的是,SVD 将为您提供最佳解决方案,如果您可以承受由frobenius norm 计算的较小损失,您可能需要考虑使用CUR algorithm。它将扩展到具有 O(n*m) 的更大数据集。
U = CUR^t
其中 C 和 R 现在是 SPARSE 矩阵。
如果您想查看 python 实现,请查看pymf。但是要小心那个确切的实现,因为在这个时间点上,似乎有一个open issue 与实现。
【讨论】:
【参考方案2】:即使输入矩阵是稀疏的,输出也不会是稀疏矩阵。如果系统不支持密集矩阵,则也不支持结果
【讨论】:
【参考方案3】:通常是best practice 使用coo_matrix
建立矩阵,然后使用.tocsc()
对其进行转换来操作它。
【讨论】:
以上是关于在 Python 中对稀疏矩阵执行分解的主要内容,如果未能解决你的问题,请参考以下文章