在python中找到具有特定稀疏矩阵特征值的特征向量

时间:2017-05-21 17:03:24

标签: python numpy scipy sparse-matrix linear-algebra

我有一个大的稀疏矩阵,我想找到具有特定特征值的特征向量。在scipy.sparse.linalg.eigs中,它表示必需的参数k:

“k是所需的特征值和特征向量的数量.k必须小于N-1。不可能计算矩阵的所有特征向量”。

问题是我不知道对应于我想要的特征值有多少个特征向量。在这种情况下我该怎么做?

1 个答案:

答案 0 :(得分:0)

我建议使用奇异值分解(SVD)。有scipy的函数,您可以使用SVD from scipy.sparse.linalg import svds来处理稀疏矩阵。您可以通过以下方式找到特征值(在本例中为奇异值)和特征向量:

U, Sigma, VT = svds(X, k=n_components, tol=tol)

其中X可以是稀疏CSR矩阵,UVT是左特征向量和右特征向量的集合,对应Sigma中的奇异值。在这里,您可以控制组件数量。我会先说小n_components,然后再增加它。您可以对Sigma进行排名,并查看您所拥有的奇异值的分布。会有一些大数字并迅速下降。您可以根据奇异值设置要保留的特征向量的阈值。

如果您想使用scikit-learn,可以使用课程sklearn.decomposition.TruncatedSVD让您按照我的说明进行操作。