我正在尝试使用sklearn
库在Python中的大型稀疏矩阵中分解组件中的信号(矩阵分解)。
我利用scipy的scipy.sparse.csc_matrix
来构建我的数据矩阵。但是,我无法执行任何分析,例如因子分析或独立成分分析。我唯一能做的就是使用truncatedSVD
或scipy的scipy.sparse.linalg.svds
并执行PCA。
有没有人知道在python中使用稀疏矩阵进行ICA或FA的任何解决方法?任何帮助将非常感激!感谢。
答案 0 :(得分: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。
答案 1 :(得分:0)
即使输入矩阵是稀疏的,输出也不是稀疏矩阵。如果系统不支持密集矩阵,则不支持结果
答案 2 :(得分:0)
通常best practice使用coo_matrix
来建立矩阵,然后使用.tocsc()
对其进行转换以对其进行操作。