我有一个大的稀疏矩阵,我想找到具有特定特征值的特征向量。在scipy.sparse.linalg.eigs中,它表示必需的参数k:
“k是所需的特征值和特征向量的数量.k必须小于N-1。不可能计算矩阵的所有特征向量”。
问题是我不知道对应于我想要的特征值有多少个特征向量。在这种情况下我该怎么做?
答案 0 :(得分:0)
我建议使用奇异值分解(SVD)。有scipy
的函数,您可以使用SVD from scipy.sparse.linalg import svds
来处理稀疏矩阵。您可以通过以下方式找到特征值(在本例中为奇异值)和特征向量:
U, Sigma, VT = svds(X, k=n_components, tol=tol)
其中X
可以是稀疏CSR矩阵,U
和VT
是左特征向量和右特征向量的集合,对应Sigma
中的奇异值。在这里,您可以控制组件数量。我会先说小n_components
,然后再增加它。您可以对Sigma
进行排名,并查看您所拥有的奇异值的分布。会有一些大数字并迅速下降。您可以根据奇异值设置要保留的特征向量的阈值。
如果您想使用scikit-learn
,可以使用课程sklearn.decomposition.TruncatedSVD
让您按照我的说明进行操作。