在Python中对稀疏矩阵执行分解

时间:2015-04-28 21:21:13

标签: python scipy scikit-learn sparse-matrix pca

我正在尝试使用sklearn库在Python中的大型稀疏矩阵中分解组件中的信号(矩阵分解)。

我利用scipy的scipy.sparse.csc_matrix来构建我的数据矩阵。但是,我无法执行任何分析,例如因子分析或独立成分分析。我唯一能做的就是使用truncatedSVD或scipy的scipy.sparse.linalg.svds并执行PCA。

有没有人知道在python中使用稀疏矩阵进行ICA或FA的任何解决方法?任何帮助将非常感激!感谢。

3 个答案:

答案 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()对其进行转换以对其进行操作。